fork download
  1. type Predicate =
  2. | A
  3. | B
  4. | And of Predicate * Predicate
  5. | Or of Predicate * Predicate
  6. | Xor of Predicate * Predicate
  7. | Not of Predicate
  8.  
  9. let rec eval (p : Predicate) (a : bool) (b : bool) =
  10. match p with
  11. | A -> a
  12. | B -> b
  13. | And (q, r) -> eval q a b && eval r a b
  14. | Or (q, r) -> eval q a b || eval r a b
  15. | Xor (q, r) -> eval q a b <> eval r a b
  16. | Not (q) -> not (eval q a b)
  17.  
  18. let table (p : Predicate) =
  19. seq {
  20. for a in [false; true] do
  21. for b in [false; true] do
  22. yield (a, b, eval p a b)
  23. }
  24.  
  25. table (Xor (Or (Not (And (A, B)), B), Not B))
  26. |> Seq.iter (fun (a, b, r) -> printf "%b\t%b\t%b\n" a b r)
  27.  
Success #stdin #stdout 0.11s 12112KB
stdin
Standard input is empty
stdout
false	false	false
false	true	true
true	false	false
true	true	true