1
1
// -*- rust -*-
2
2
3
- #[ doc = "Classic Boolean logic reified as ADT " ] ;
3
+ #[ doc = "Boolean logic" ] ;
4
4
5
- export t;
6
5
export not, and, or, xor, implies;
7
6
export eq, ne, is_true, is_false;
8
7
export from_str, to_str, all_values, to_bit;
9
8
10
- #[ doc = "The type of boolean logic values" ]
11
- type t = bool ;
12
-
13
- #[ doc = "Negation/Inverse" ]
14
- pure fn not ( v : t ) -> t { !v }
9
+ #[ doc = "Negation / inverse" ]
10
+ pure fn not ( v : bool ) -> bool { !v }
15
11
16
12
#[ doc = "Conjunction" ]
17
- pure fn and ( a : t , b : t ) -> t { a && b }
13
+ pure fn and ( a : bool , b : bool ) -> bool { a && b }
18
14
19
15
#[ doc = "Disjunction" ]
20
- pure fn or ( a : t , b : t ) -> t { a || b }
16
+ pure fn or ( a : bool , b : bool ) -> bool { a || b }
17
+
18
+ #[ doc = "
19
+ Exclusive or
21
20
22
- #[ doc = "Exclusive or, i.e. `or(and(a, not(b)), and(not(a), b))`" ]
23
- pure fn xor ( a : t , b : t ) -> t { ( a && !b) || ( !a && b) }
21
+ Identical to `or(and(a, not(b)), and(not(a), b))`
22
+ " ]
23
+ pure fn xor ( a : bool , b : bool ) -> bool { ( a && !b) || ( !a && b) }
24
24
25
25
#[ doc = "Implication in the logic, i.e. from `a` follows `b`" ]
26
- pure fn implies ( a : t , b : t ) -> t { !a || b }
26
+ pure fn implies ( a : bool , b : bool ) -> bool { !a || b }
27
27
28
28
#[ doc = "
29
29
true if truth values `a` and `b` are indistinguishable in the logic
30
30
" ]
31
- pure fn eq ( a : t , b : t ) -> bool { a == b }
31
+ pure fn eq ( a : bool , b : bool ) -> bool { a == b }
32
32
33
33
#[ doc = "true if truth values `a` and `b` are distinguishable in the logic" ]
34
- pure fn ne ( a : t , b : t ) -> bool { a != b }
34
+ pure fn ne ( a : bool , b : bool ) -> bool { a != b }
35
35
36
36
#[ doc = "true if `v` represents truth in the logic" ]
37
- pure fn is_true ( v : t ) -> bool { v }
37
+ pure fn is_true ( v : bool ) -> bool { v }
38
38
39
39
#[ doc = "true if `v` represents falsehood in the logic" ]
40
- pure fn is_false ( v : t ) -> bool { !v }
40
+ pure fn is_false ( v : bool ) -> bool { !v }
41
41
42
42
#[ doc = "Parse logic value from `s`" ]
43
- pure fn from_str ( s : str ) -> option < t > {
43
+ pure fn from_str ( s : str ) -> option < bool > {
44
44
alt check s {
45
45
"true" { some ( true ) }
46
46
"false" { some ( false ) }
@@ -49,19 +49,19 @@ pure fn from_str(s: str) -> option<t> {
49
49
}
50
50
51
51
#[ doc = "Convert `v` into a string" ]
52
- pure fn to_str ( v : t ) -> str { if v { "true" } else { "false" } }
52
+ pure fn to_str ( v : bool ) -> str { if v { "true" } else { "false" } }
53
53
54
54
#[ doc = "
55
55
Iterates over all truth values by passing them to `blk` in an unspecified
56
56
order
57
57
" ]
58
- fn all_values ( blk : fn ( v : t ) ) {
58
+ fn all_values ( blk : fn ( v : bool ) ) {
59
59
blk ( true ) ;
60
60
blk ( false ) ;
61
61
}
62
62
63
63
#[ doc = "converts truth value to an 8 bit byte" ]
64
- pure fn to_bit ( v : t ) -> u8 { if v { 1u8 } else { 0u8 } }
64
+ pure fn to_bit ( v : bool ) -> u8 { if v { 1u8 } else { 0u8 } }
65
65
66
66
#[ test]
67
67
fn test_bool_from_str ( ) {
0 commit comments