Ternary logic: Difference between revisions
Added Wren
(Added Wren) |
|||
Line 5,671:
false | maybe || maybe
false | false || true
</pre>
=={{header|Wren}}==
<lang ecmascript>var False = -1
var Maybe = 0
var True = 1
var Chrs = ["F", "M", "T"]
class Trit {
construct new(v) {
if (v != False && v != Maybe && v != True) Fiber.abort("Invalid argument.")
_v = v
}
v { _v }
! { Trit.new(-_v) }
&(other) { (_v < other.v) ? this : other }
|(other) { (_v > other.v) ? this : other }
>>(other) { (-_v > other.v) ? !this : other }
==(other) { Trit.new(_v * other.v) }
toString { Chrs[_v + 1] }
}
var trits = [Trit.new(True), Trit.new(Maybe), Trit.new(False)]
System.print("not")
System.print("-------")
for (t in trits) System.print(" %(t) | %(!t)")
System.print("\nand | T M F")
System.print("-------------")
for (t in trits) {
System.write(" %(t) | ")
for (u in trits) System.write("%(t & u) ")
System.print()
}
System.print("\nor | T M F")
System.print("-------------")
for (t in trits) {
System.write(" %(t) | ")
for (u in trits) System.write("%(t | u) ")
System.print()
}
System.print("\nimp | T M F")
System.print("-------------")
for (t in trits) {
System.write(" %(t) | ")
for (u in trits) System.write("%(t >> u) ")
System.print()
}
System.print("\neqv | T M F")
System.print("-------------")
for (t in trits) {
System.write(" %(t) | ")
for (u in trits) System.write("%(t == u) ")
System.print()
}</lang>
{{out}}
<pre>
not
-------
T | F
M | M
F | T
and | T M F
-------------
T | T M F
M | M M F
F | F F F
or | T M F
-------------
T | T T T
M | T M M
F | T M F
imp | T M F
-------------
T | T M F
M | T M M
F | T T T
eqv | T M F
-------------
T | T M F
M | M M M
F | F M T
</pre>
|