Source file builtins_bool.ml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
let () =
let t = Lang.univ_t ~constraints:[Type.ord_constr] () in
let register_op name op =
ignore
(Lang.add_builtin name ~category:`Bool
~descr:"Comparison of comparable values."
[("", t, None, None); ("", t, None, None)]
Lang.bool_t
(fun p ->
let a = Lang.assoc "" 1 p in
let b = Lang.assoc "" 2 p in
Lang.bool (op (Value.compare a b))))
in
register_op "==" (fun c -> c = 0);
register_op "!=" (fun c -> c <> 0);
register_op "<" (fun c -> c = -1);
register_op "<=" (fun c -> c <> 1);
register_op ">=" (fun c -> c <> -1);
register_op ">" (fun c -> c = 1)
let _ =
Lang.add_builtin "and" ~category:`Bool
~descr:"Return the conjunction of its arguments"
[
("", Lang.getter_t Lang.bool_t, None, None);
("", Lang.getter_t Lang.bool_t, None, None);
]
Lang.bool_t
(fun p ->
let a = Lang.to_bool_getter (Lang.assoc "" 1 p) in
let b = Lang.to_bool_getter (Lang.assoc "" 2 p) in
Lang.bool (if a () then b () else false))
let _ =
Lang.add_builtin "or" ~category:`Bool
~descr:"Return the disjunction of its arguments"
[
("", Lang.getter_t Lang.bool_t, None, None);
("", Lang.getter_t Lang.bool_t, None, None);
]
Lang.bool_t
(fun p ->
let a = Lang.to_bool_getter (Lang.assoc "" 1 p) in
let b = Lang.to_bool_getter (Lang.assoc "" 2 p) in
Lang.bool (if a () then true else b ()))
let _ =
Lang.add_builtin "not" ~category:`Bool
~descr:"Returns the negation of its argument."
[("", Lang.bool_t, None, None)]
Lang.bool_t
(fun p -> Lang.bool (not (Lang.to_bool (List.assoc "" p))))