File tree Expand file tree Collapse file tree 12 files changed +22436
-22028
lines changed Expand file tree Collapse file tree 12 files changed +22436
-22028
lines changed Original file line number Diff line number Diff line change @@ -1286,8 +1286,10 @@ let init n f =
1286
1286
1287
1287
let rec rev_append l1 l2 =
1288
1288
match l1 with
1289
- [] -> l2
1290
- | a :: l -> rev_append l (a :: l2)
1289
+ | [] -> l2
1290
+ | [a0] -> a0::l2 (* single element is common *)
1291
+ | [a0 ; a1] -> a1 :: a0 :: l2
1292
+ | a0::a1::a2::rest -> rev_append rest (a2::a1::a0::l2)
1291
1293
1292
1294
let rev l = rev_append l []
1293
1295
@@ -1364,7 +1366,16 @@ let rec rev_map_append l1 l2 f =
1364
1366
let rec flat_map_aux f acc append lx =
1365
1367
match lx with
1366
1368
| [] -> rev_append acc append
1367
- | a0::rest -> flat_map_aux f (rev_append (f a0) acc ) append rest
1369
+ | a0::rest ->
1370
+ let new_acc =
1371
+ match f a0 with
1372
+ | [] -> acc
1373
+ | [a0] -> a0::acc
1374
+ | [a0;a1] -> a1::a0::acc
1375
+ | a0::a1::a2::rest ->
1376
+ rev_append rest (a2::a1::a0::acc)
1377
+ in
1378
+ flat_map_aux f new_acc append rest
1368
1379
1369
1380
let flat_map lx f =
1370
1381
flat_map_aux f [] [] lx
Original file line number Diff line number Diff line change @@ -1278,8 +1278,10 @@ let init n f =
1278
1278
1279
1279
let rec rev_append l1 l2 =
1280
1280
match l1 with
1281
- [] -> l2
1282
- | a :: l -> rev_append l (a :: l2)
1281
+ | [] -> l2
1282
+ | [a0] -> a0::l2 (* single element is common *)
1283
+ | [a0 ; a1] -> a1 :: a0 :: l2
1284
+ | a0 ::a1 ::a2 ::rest -> rev_append rest (a2::a1::a0::l2)
1283
1285
1284
1286
let rev l = rev_append l []
1285
1287
@@ -1356,7 +1358,16 @@ let rec rev_map_append l1 l2 f =
1356
1358
let rec flat_map_aux f acc append lx =
1357
1359
match lx with
1358
1360
| [] -> rev_append acc append
1359
- | a0 ::rest -> flat_map_aux f (rev_append (f a0) acc ) append rest
1361
+ | a0 ::rest ->
1362
+ let new_acc =
1363
+ match f a0 with
1364
+ | [] -> acc
1365
+ | [a0] -> a0::acc
1366
+ | [a0;a1] -> a1::a0::acc
1367
+ | a0 ::a1 ::a2 ::rest ->
1368
+ rev_append rest (a2::a1::a0::acc)
1369
+ in
1370
+ flat_map_aux f new_acc append rest
1360
1371
1361
1372
let flat_map lx f =
1362
1373
flat_map_aux f [] [] lx
Original file line number Diff line number Diff line change @@ -5963,8 +5963,10 @@ let init n f =
5963
5963
5964
5964
let rec rev_append l1 l2 =
5965
5965
match l1 with
5966
- [] -> l2
5967
- | a :: l -> rev_append l (a :: l2)
5966
+ | [] -> l2
5967
+ | [a0] -> a0::l2 (* single element is common *)
5968
+ | [a0 ; a1] -> a1 :: a0 :: l2
5969
+ | a0::a1::a2::rest -> rev_append rest (a2::a1::a0::l2)
5968
5970
5969
5971
let rev l = rev_append l []
5970
5972
@@ -6041,7 +6043,16 @@ let rec rev_map_append l1 l2 f =
6041
6043
let rec flat_map_aux f acc append lx =
6042
6044
match lx with
6043
6045
| [] -> rev_append acc append
6044
- | a0::rest -> flat_map_aux f (rev_append (f a0) acc ) append rest
6046
+ | a0::rest ->
6047
+ let new_acc =
6048
+ match f a0 with
6049
+ | [] -> acc
6050
+ | [a0] -> a0::acc
6051
+ | [a0;a1] -> a1::a0::acc
6052
+ | a0::a1::a2::rest ->
6053
+ rev_append rest (a2::a1::a0::acc)
6054
+ in
6055
+ flat_map_aux f new_acc append rest
6045
6056
6046
6057
let flat_map lx f =
6047
6058
flat_map_aux f [] [] lx
Original file line number Diff line number Diff line change @@ -1286,8 +1286,10 @@ let init n f =
1286
1286
1287
1287
let rec rev_append l1 l2 =
1288
1288
match l1 with
1289
- [] -> l2
1290
- | a :: l -> rev_append l (a :: l2)
1289
+ | [] -> l2
1290
+ | [a0] -> a0::l2 (* single element is common *)
1291
+ | [a0 ; a1] -> a1 :: a0 :: l2
1292
+ | a0::a1::a2::rest -> rev_append rest (a2::a1::a0::l2)
1291
1293
1292
1294
let rev l = rev_append l []
1293
1295
@@ -1364,7 +1366,16 @@ let rec rev_map_append l1 l2 f =
1364
1366
let rec flat_map_aux f acc append lx =
1365
1367
match lx with
1366
1368
| [] -> rev_append acc append
1367
- | a0::rest -> flat_map_aux f (rev_append (f a0) acc ) append rest
1369
+ | a0::rest ->
1370
+ let new_acc =
1371
+ match f a0 with
1372
+ | [] -> acc
1373
+ | [a0] -> a0::acc
1374
+ | [a0;a1] -> a1::a0::acc
1375
+ | a0::a1::a2::rest ->
1376
+ rev_append rest (a2::a1::a0::acc)
1377
+ in
1378
+ flat_map_aux f new_acc append rest
1368
1379
1369
1380
let flat_map lx f =
1370
1381
flat_map_aux f [] [] lx
Original file line number Diff line number Diff line change @@ -9253,8 +9253,10 @@ let init n f =
9253
9253
9254
9254
let rec rev_append l1 l2 =
9255
9255
match l1 with
9256
- [] -> l2
9257
- | a :: l -> rev_append l (a :: l2)
9256
+ | [] -> l2
9257
+ | [a0] -> a0::l2 (* single element is common *)
9258
+ | [a0 ; a1] -> a1 :: a0 :: l2
9259
+ | a0::a1::a2::rest -> rev_append rest (a2::a1::a0::l2)
9258
9260
9259
9261
let rev l = rev_append l []
9260
9262
@@ -9331,7 +9333,16 @@ let rec rev_map_append l1 l2 f =
9331
9333
let rec flat_map_aux f acc append lx =
9332
9334
match lx with
9333
9335
| [] -> rev_append acc append
9334
- | a0::rest -> flat_map_aux f (rev_append (f a0) acc ) append rest
9336
+ | a0::rest ->
9337
+ let new_acc =
9338
+ match f a0 with
9339
+ | [] -> acc
9340
+ | [a0] -> a0::acc
9341
+ | [a0;a1] -> a1::a0::acc
9342
+ | a0::a1::a2::rest ->
9343
+ rev_append rest (a2::a1::a0::acc)
9344
+ in
9345
+ flat_map_aux f new_acc append rest
9335
9346
9336
9347
let flat_map lx f =
9337
9348
flat_map_aux f [] [] lx
You can’t perform that action at this time.
0 commit comments