回答編集履歴
3
誤字などを修正しました
test
CHANGED
@@ -92,7 +92,7 @@
|
|
92
92
|
|
93
93
|
```rust
|
94
94
|
|
95
|
-
let power_of_two = |
|
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
|
-
あと
|
281
|
+
あと`i128`型ですが、64ビットのCPUでは直接計算できず、ソフトウェアで計算することになりますので計算が遅いです。もし可能ならCPUが直接計算できる`i64`や`u64`などを使うのがおすすめです。
|
2
map()などでもっと簡潔に書ける方法を追記しました
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
フォーマットを修正しました
test
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
|
4
4
|
|
5
|
-
*元のコードのクロージャ部分*
|
5
|
+
**元のコードのクロージャ部分**
|
6
6
|
|
7
7
|
|
8
8
|
|