RosettaCodeData/Task/Ternary-logic/Pluto/ternary-logic.pluto
2026-04-30 12:34:36 -04:00

66 lines
1.4 KiB
Text

enum begin
False = -1,
Maybe,
True
end
local Chrs <const> = {"F", "M", "T"}
class trit
public v
function __construct(v)
assert(v == False or v == Maybe or v == True, "Invalid argument.")
self.v = v
end
function __bnot() return new trit(-self.v) end
function __band(other) return (self.v < other.v) ? (self) : other end
function __bor(other) return (self.v > other.v) ? (self) : other end
function __shr(other) return (-self.v > other.v) ? (~self) : other end
function eqv(other) return new trit(self.v * other.v) end
function __tostring() return Chrs[self.v + 2] end
end
local trits = {new trit(True), new trit(Maybe), new trit(False)}
print("not")
print("-------")
for trits as t do print($" {t} | {~t}") end
print("\nand | T M F")
print("-------------")
for trits as t do
io.write($" {t} | ")
for trits as u do io.write($"{tostring(t & u)} ") end
print()
end
print("\nor | T M F")
print("-------------")
for trits as t do
io.write($" {t} | ")
for trits as u do io.write($"{tostring(t | u)} ") end
print()
end
print("\nimp | T M F")
print("-------------")
for trits as t do
io.write($" {t} | ")
for trits as u do io.write($"{tostring(t >> u)} ") end
print()
end
print("\neqv | T M F")
print("-------------")
for trits as t do
io.write($" {t} | ")
for trits as u do io.write($"{tostring(t:eqv(u))} ") end
print()
end