@@ -103,11 +103,11 @@ let rec mapi i f = function
103
103
let mapi f l = mapi 0 f l
104
104
105
105
let rev_map f l =
106
- let rec rmap_f accu = function
106
+ let rec rmap_f f accu = function
107
107
| [] -> accu
108
- | a ::l -> rmap_f (f a :: accu) l
108
+ | a ::l -> rmap_f f (f a :: accu) l
109
109
in
110
- rmap_f [] l
110
+ rmap_f f [] l
111
111
112
112
113
113
let rec iter f = function
@@ -137,13 +137,13 @@ let rec map2 f l1 l2 =
137
137
| (_ , _ ) -> invalid_arg " List.map2"
138
138
139
139
let rev_map2 f l1 l2 =
140
- let rec rmap2_f accu l1 l2 =
140
+ let rec rmap2_f f accu l1 l2 =
141
141
match (l1, l2) with
142
142
| ([] , [] ) -> accu
143
- | (a1 ::l1 , a2 ::l2 ) -> rmap2_f (f a1 a2 :: accu) l1 l2
143
+ | (a1 ::l1 , a2 ::l2 ) -> rmap2_f f (f a1 a2 :: accu) l1 l2
144
144
| (_ , _ ) -> invalid_arg " List.rev_map2"
145
145
in
146
- rmap2_f [] l1 l2
146
+ rmap2_f f [] l1 l2
147
147
148
148
149
149
let rec iter2 f l1 l2 =
@@ -242,29 +242,29 @@ let rec find_map f = function
242
242
end
243
243
244
244
let find_all p =
245
- let rec find accu = function
245
+ let rec find p accu = function
246
246
| [] -> rev accu
247
- | x :: l -> if p x then find (x :: accu) l else find accu l in
248
- find []
247
+ | x :: l -> if p x then find p (x :: accu) l else find p accu l in
248
+ find p []
249
249
250
250
let filter = find_all
251
251
252
252
let filteri p l =
253
- let rec aux i acc = function
253
+ let rec aux p i acc = function
254
254
| [] -> rev acc
255
- | x ::l -> aux (i + 1 ) (if p i x then x::acc else acc) l
255
+ | x ::l -> aux p (i + 1 ) (if p i x then x::acc else acc) l
256
256
in
257
- aux 0 [] l
257
+ aux p 0 [] l
258
258
259
259
let filter_map f =
260
- let rec aux accu = function
260
+ let rec aux f accu = function
261
261
| [] -> rev accu
262
262
| x :: l ->
263
263
match f x with
264
- | None -> aux accu l
265
- | Some v -> aux (v :: accu) l
264
+ | None -> aux f accu l
265
+ | Some v -> aux f (v :: accu) l
266
266
in
267
- aux []
267
+ aux f []
268
268
269
269
let concat_map f l =
270
270
let rec aux f acc = function
@@ -275,29 +275,29 @@ let concat_map f l =
275
275
in aux f [] l
276
276
277
277
let fold_left_map f accu l =
278
- let rec aux accu l_accu = function
278
+ let rec aux f accu l_accu = function
279
279
| [] -> accu, rev l_accu
280
280
| x :: l ->
281
281
let accu, x = f accu x in
282
- aux accu (x :: l_accu) l in
283
- aux accu [] l
282
+ aux f accu (x :: l_accu) l in
283
+ aux f accu [] l
284
284
285
285
let partition p l =
286
- let rec part yes no = function
286
+ let rec part p yes no = function
287
287
| [] -> (rev yes, rev no)
288
- | x :: l -> if p x then part (x :: yes) no l else part yes (x :: no) l in
289
- part [] [] l
288
+ | x :: l -> if p x then part p (x :: yes) no l else part p yes (x :: no) l in
289
+ part p [] [] l
290
290
291
291
let partition_map p l =
292
- let rec part left right = function
292
+ let rec part p left right = function
293
293
| [] -> (rev left, rev right)
294
294
| x :: l ->
295
295
begin match p x with
296
- | Either. Left v -> part (v :: left) right l
297
- | Either. Right v -> part left (v :: right) l
296
+ | Either. Left v -> part p (v :: left) right l
297
+ | Either. Right v -> part p left (v :: right) l
298
298
end
299
299
in
300
- part [] [] l
300
+ part p [] [] l
301
301
302
302
let rec split = function
303
303
[] -> ([] , [] )
@@ -323,23 +323,23 @@ let rec merge cmp l1 l2 =
323
323
324
324
325
325
let stable_sort cmp l =
326
- let rec rev_merge l1 l2 accu =
326
+ let rec rev_merge cmp l1 l2 accu =
327
327
match l1, l2 with
328
328
| [] , l2 -> rev_append l2 accu
329
329
| l1 , [] -> rev_append l1 accu
330
330
| h1 ::t1 , h2 ::t2 ->
331
331
if cmp h1 h2 < = 0
332
- then rev_merge t1 l2 (h1::accu)
333
- else rev_merge l1 t2 (h2::accu)
332
+ then rev_merge cmp t1 l2 (h1::accu)
333
+ else rev_merge cmp l1 t2 (h2::accu)
334
334
in
335
- let rec rev_merge_rev l1 l2 accu =
335
+ let rec rev_merge_rev cmp l1 l2 accu =
336
336
match l1, l2 with
337
337
| [] , l2 -> rev_append l2 accu
338
338
| l1 , [] -> rev_append l1 accu
339
339
| h1 ::t1 , h2 ::t2 ->
340
340
if cmp h1 h2 > 0
341
- then rev_merge_rev t1 l2 (h1::accu)
342
- else rev_merge_rev l1 t2 (h2::accu)
341
+ then rev_merge_rev cmp t1 l2 (h1::accu)
342
+ else rev_merge_rev cmp l1 t2 (h2::accu)
343
343
in
344
344
let rec sort n l =
345
345
match n, l with
@@ -362,7 +362,7 @@ let stable_sort cmp l =
362
362
let n2 = n - n1 in
363
363
let s1, l2 = rev_sort n1 l in
364
364
let s2, tl = rev_sort n2 l2 in
365
- (rev_merge_rev s1 s2 [] , tl)
365
+ (rev_merge_rev cmp s1 s2 [] , tl)
366
366
and rev_sort n l =
367
367
match n, l with
368
368
| 2 , x1 :: x2 :: tl ->
@@ -384,7 +384,7 @@ let stable_sort cmp l =
384
384
let n2 = n - n1 in
385
385
let s1, l2 = sort n1 l in
386
386
let s2, tl = sort n2 l2 in
387
- (rev_merge s1 s2 [] , tl)
387
+ (rev_merge cmp s1 s2 [] , tl)
388
388
in
389
389
let len = length l in
390
390
if len < 2 then l else fst (sort len l)
@@ -429,27 +429,27 @@ let stable_sort cmp l =
429
429
(* * sorting + removing duplicates *)
430
430
431
431
let sort_uniq cmp l =
432
- let rec rev_merge l1 l2 accu =
432
+ let rec rev_merge cmp l1 l2 accu =
433
433
match l1, l2 with
434
434
| [] , l2 -> rev_append l2 accu
435
435
| l1 , [] -> rev_append l1 accu
436
436
| h1 ::t1 , h2 ::t2 ->
437
437
let c = cmp h1 h2 in
438
- if c = 0 then rev_merge t1 t2 (h1::accu)
438
+ if c = 0 then rev_merge cmp t1 t2 (h1::accu)
439
439
else if c < 0
440
- then rev_merge t1 l2 (h1::accu)
441
- else rev_merge l1 t2 (h2::accu)
440
+ then rev_merge cmp t1 l2 (h1::accu)
441
+ else rev_merge cmp l1 t2 (h2::accu)
442
442
in
443
- let rec rev_merge_rev l1 l2 accu =
443
+ let rec rev_merge_rev cmp l1 l2 accu =
444
444
match l1, l2 with
445
445
| [] , l2 -> rev_append l2 accu
446
446
| l1 , [] -> rev_append l1 accu
447
447
| h1 ::t1 , h2 ::t2 ->
448
448
let c = cmp h1 h2 in
449
- if c = 0 then rev_merge_rev t1 t2 (h1::accu)
449
+ if c = 0 then rev_merge_rev cmp t1 t2 (h1::accu)
450
450
else if c > 0
451
- then rev_merge_rev t1 l2 (h1::accu)
452
- else rev_merge_rev l1 t2 (h2::accu)
451
+ then rev_merge_rev cmp t1 l2 (h1::accu)
452
+ else rev_merge_rev cmp l1 t2 (h2::accu)
453
453
in
454
454
let rec sort n l =
455
455
match n, l with
@@ -490,7 +490,7 @@ let sort_uniq cmp l =
490
490
let n2 = n - n1 in
491
491
let s1, l2 = rev_sort n1 l in
492
492
let s2, tl = rev_sort n2 l2 in
493
- (rev_merge_rev s1 s2 [] , tl)
493
+ (rev_merge_rev cmp s1 s2 [] , tl)
494
494
and rev_sort n l =
495
495
match n, l with
496
496
| 2 , x1 :: x2 :: tl ->
@@ -530,7 +530,7 @@ let sort_uniq cmp l =
530
530
let n2 = n - n1 in
531
531
let s1, l2 = sort n1 l in
532
532
let s2, tl = sort n2 l2 in
533
- (rev_merge s1 s2 [] , tl)
533
+ (rev_merge cmp s1 s2 [] , tl)
534
534
in
535
535
let len = length l in
536
536
if len < 2 then l else fst (sort len l)
0 commit comments