diff options
Diffstat (limited to 'ocamlbuild/bool.ml')
-rw-r--r-- | ocamlbuild/bool.ml | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/ocamlbuild/bool.ml b/ocamlbuild/bool.ml new file mode 100644 index 000000000..4fa734e92 --- /dev/null +++ b/ocamlbuild/bool.ml @@ -0,0 +1,38 @@ +(***********************************************************************) +(* ocamlbuild *) +(* *) +(* Nicolas Pouillard, Berke Durak, projet Gallium, INRIA Rocquencourt *) +(* *) +(* Copyright 2007 Institut National de Recherche en Informatique et *) +(* en Automatique. All rights reserved. This file is distributed *) +(* under the terms of the Q Public License version 1.0. *) +(* *) +(***********************************************************************) + +(* $Id$ *) +(* Original author: Berke Durak *) +(* Bool *) + +type 'a boolean = And of 'a boolean list | Or of 'a boolean list | Not of 'a boolean | Atom of 'a | True | False;; + +let rec eval f = function + | And l -> List.for_all (eval f) l + | Or l -> List.exists (eval f) l + | Not x -> not (eval f x) + | Atom a -> f a + | True -> true + | False -> false +;; +let rec iter f = function + | (And l|Or l) -> List.iter (iter f) l + | Not x -> iter f x + | Atom a -> f a + | True|False -> () +;; +let rec map f = function + | And l -> And(List.map (map f) l) + | Or l -> Or(List.map (map f) l) + | Not x -> Not(map f x) + | Atom a -> Atom(f a) + | (True|False) as b -> b +;; |