X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=blobdiff_plain;f=helm%2Fsoftware%2Flambda-delta%2Flib%2Fcps.ml;h=75f8bcd37fa330c9ba8ddf1f2a2ad494a9a9b96b;hb=828a190748fe67669df59d8813d32e17a3bbfd7a;hp=2e8b2c7155715c14d106bad53edd72bb21c11e0a;hpb=8659e85d49be1ad72622d4d3a73d384b744c3c08;p=helm.git diff --git a/helm/software/lambda-delta/lib/cps.ml b/helm/software/lambda-delta/lib/cps.ml index 2e8b2c715..75f8bcd37 100644 --- a/helm/software/lambda-delta/lib/cps.ml +++ b/helm/software/lambda-delta/lib/cps.ml @@ -9,6 +9,8 @@ \ / This software is distributed as is, NO WARRANTY. V_______________________________________________________________ *) +let err () = assert false + let start x = x let id f x = f x @@ -30,10 +32,10 @@ let rec list_rev_map_append f map ~tail = function let f hd = list_rev_map_append f map ~tail:(hd :: tail) tl in map f hd -let rec forall2 f map l1 l2 = match l1, l2 with +let rec list_forall2 f map l1 l2 = match l1, l2 with | [], [] -> f true | hd1 :: tl1, hd2 :: tl2 -> - let f b = if b then forall2 f map tl1 tl2 else f false in + let f b = if b then list_forall2 f map tl1 tl2 else f false in map f hd1 hd2 | _ -> f false @@ -46,9 +48,25 @@ let list_rev_map = let list_rev = list_rev_append ~tail:[] +let list_fold_right f map l a = + let map f a m = map f m a in + list_rev (list_fold_left f map a) l + let list_map f = list_rev_map (list_rev f) let list_iter f map l = let map f () x = map f x in list_fold_left f map () l + +let rec list_fold_left2 f map a l1 l2 = match l1, l2 with + | [], [] -> f a + | hd1 :: tl1, hd2 :: tl2 -> + let f a = list_fold_left2 f map a tl1 tl2 in + map f a hd1 hd2 + | _ -> assert false + +let rec list_mem ?(eq=(=)) a = function + | [] -> false + | hd :: _ when eq a hd -> true + | _ :: tl -> list_mem ~eq a tl