Source file
src/tawesoft.co.uk/go/operator/bool.go
Documentation:
src/tawesoft.co.uk/go/operator/bool.go
1 package operator
2
3 type boolUnary struct {
4 True func(bool) bool
5 False func(bool) bool
6 Identity func(bool) bool
7 Not func(bool) bool
8 }
9
10 type boolBinary struct{
11 True func(bool, bool) bool
12 False func(bool, bool) bool
13 P func(bool, bool) bool
14 Q func(bool, bool) bool
15 NotP func(bool, bool) bool
16 NotQ func(bool, bool) bool
17 Eq func(bool, bool) bool
18 Neq func(bool, bool) bool
19 And func(bool, bool) bool
20 Nand func(bool, bool) bool
21 Or func(bool, bool) bool
22 Nor func(bool, bool) bool
23 Xor func(bool, bool) bool
24 Xnor func(bool, bool) bool
25 Implies func(bool, bool) bool
26 NonImplies func(bool, bool) bool
27 ConImplies func(bool, bool) bool
28 ConNonImplies func(bool, bool) bool
29 }
30
31 type boolNary struct{
32 True func(...bool) bool
33 False func(...bool) bool
34
35 All func(...bool) bool
36 Any func(...bool) bool
37 None func(...bool) bool
38 }
39
40
41 var Bool = struct {
42 Unary boolUnary
43 Binary boolBinary
44 Nary boolNary
45 }{
46 Unary: boolUnary{
47 True: func(_ bool) bool { return true},
48 False: func(_ bool) bool { return false},
49 Identity: func(p bool) bool { return p },
50 Not: func(p bool) bool { return !p },
51 },
52
53 Binary: boolBinary{
54 True: func(_ bool, _ bool) bool { return true },
55 False: func(_ bool, _ bool) bool { return false },
56 P: func(p bool, _ bool) bool { return p },
57 Q: func(_ bool, q bool) bool { return q },
58 NotP: func(p bool, _ bool) bool { return !p },
59 NotQ: func(_ bool, q bool) bool { return !q },
60 Eq: func(p bool, q bool) bool { return p == q },
61 Neq: func(p bool, q bool) bool { return p != q },
62 And: func(p bool, q bool) bool { return p && q },
63 Nand: func(p bool, q bool) bool { return !(p && q) },
64 Or: func(p bool, q bool) bool { return p || q },
65 Nor: func(p bool, q bool) bool { return !(p || q) },
66 Xor: func(p bool, q bool) bool { return p != q },
67 Xnor: func(p bool, q bool) bool { return p == q },
68 Implies: func(p bool, q bool) bool { return (!p) || q },
69 NonImplies: func(p bool, q bool) bool { return p && (!q) },
70 ConImplies: func(p bool, q bool) bool { return (!q) || p },
71 ConNonImplies: func(p bool, q bool) bool { return q && (!p) },
72 },
73
74 Nary: boolNary{
75 True: func(_...bool) bool { return true },
76 False: func(_...bool) bool { return false },
77 All: boolNaryAll1,
78 Any: boolNaryAny1,
79 None: boolNaryNone1,
80 },
81 }
82
83 func boolNaryAll1(p...bool) bool {
84 for i := 0; i < len(p); i++ {
85 if !p[i] { return false }
86 }
87 return true
88 }
89
90 func boolNaryAll2(p...bool) (result bool) {
91 result = true
92 for i := 0; i < len(p); i++ {
93 result = result && p[i]
94 }
95 return result
96 }
97
98 func boolNaryAny1(p...bool) bool {
99 for i := 0; i < len(p); i++ {
100 if p[i] { return true }
101 }
102 return false
103 }
104
105 func boolNaryAny2(p...bool) (result bool) {
106 for i := 0; i < len(p); i++ {
107 result = result || p[i]
108 }
109 return result
110 }
111
112 func boolNaryNone1(p...bool) bool {
113 for i := 0; i < len(p); i++ {
114 if p[i] { return false }
115 }
116 return true
117 }
118
119 func boolNaryNone2(p...bool) (result bool) {
120 result = false
121 for i := 0; i < len(p); i++ {
122 result = result || p[i]
123 }
124 return !result
125 }
126
127
View as plain text