回答編集履歴

3

誤字などを修正しました

2019/12/27 10:20

投稿

tatsuya6502
tatsuya6502

スコア2035

test CHANGED
@@ -92,7 +92,7 @@
92
92
 
93
93
  ```rust
94
94
 
95
- let power_of_two = | i | {
95
+ let power_of_two = |i| {
96
96
 
97
97
  let mut x: i128 = 1;
98
98
 
@@ -278,4 +278,4 @@
278
278
 
279
279
 
280
280
 
281
- あと`i128`型の計算ですが、64ビットのCPUでは直接計算できず、ソフトウェアで計算することになりますので遅いです。もし可能ならCPUが直接計算できる`i64`や`u64`などを使うのがおすすめです。
281
+ あと`i128`型ですが、64ビットのCPUでは直接計算できず、ソフトウェアで計算することになりますので計算が遅いです。もし可能ならCPUが直接計算できる`i64`や`u64`などを使うのがおすすめです。

2

map()などでもっと簡潔に書ける方法を追記しました

2019/12/27 10:20

投稿

tatsuya6502
tatsuya6502

スコア2035

test CHANGED
@@ -201,3 +201,81 @@
201
201
  512
202
202
 
203
203
  ```
204
+
205
+
206
+
207
+ ### 追記
208
+
209
+
210
+
211
+ 余談になりますがイテレータの`map()`と`collect()`を使うと、2つ目の`for`が簡潔に書けます。
212
+
213
+
214
+
215
+ ```rust
216
+
217
+ fn main() {
218
+
219
+ let power_of_two = |i| {
220
+
221
+ let mut x: i128 = 1;
222
+
223
+ for _ in 0..i {
224
+
225
+ x *= 2;
226
+
227
+ }
228
+
229
+ x
230
+
231
+ };
232
+
233
+
234
+
235
+ let v = (0..10).map(power_of_two).collect::<Vec<i128>>();
236
+
237
+
238
+
239
+ for i in v {
240
+
241
+ println!("{}", i);
242
+
243
+ }
244
+
245
+ }
246
+
247
+ ```
248
+
249
+
250
+
251
+ さらに1つ目の`for`も`fold()`で置き換えられます。
252
+
253
+
254
+
255
+ ```rust
256
+
257
+ fn main() {
258
+
259
+ let power_of_two = |i| (0..i).fold(1, |x, _| x * 2);
260
+
261
+ let v = (0..10).map(power_of_two).collect::<Vec<i128>>();
262
+
263
+
264
+
265
+ for i in v {
266
+
267
+ println!("{}", i);
268
+
269
+ }
270
+
271
+ }
272
+
273
+ ```
274
+
275
+
276
+
277
+ Rustに慣れてきたら、こういう書き方にも挑戦してみてください。
278
+
279
+
280
+
281
+ あと、`i128`型の計算ですが、64ビットのCPUでは直接計算できず、ソフトウェアで計算することになりますので遅いです。もし可能なら、CPUが直接計算できる`i64`や`u64`などを使うのがおすすめです。

1

フォーマットを修正しました

2019/12/27 10:14

投稿

tatsuya6502
tatsuya6502

スコア2035

test CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
 
4
4
 
5
- *元のコードのクロージャ部分*
5
+ **元のコードのクロージャ部分**
6
6
 
7
7
 
8
8