(* Author: Carsten Schuermann *) (* Booleans *) signature BOOLEAN = sig datatype Exp = Val of bool | And of Exp * Exp | Or of Exp * Exp | Not of Exp | Nand of Exp * Exp | Nor of Exp * Exp val eval : Exp -> bool end structure Boolean : BOOLEAN = struct datatype Exp = Val of bool | And of Exp * Exp | Or of Exp * Exp | Not of Exp | Nand of Exp * Exp | Nor of Exp * Exp fun eval (Val b) = b | eval (And (e1, e2)) = eval e1 andalso eval e2 | eval (Or (e1, e2)) = eval e1 orelse eval e2 | eval (Not e) = not (eval e) | eval (Nand (e1, e2)) = not ((eval e1) andalso (eval e2)) | eval (Nor (e1, e2)) = not ((eval e1) orelse (eval e2)) end