98 lines
1.6 KiB
Text
98 lines
1.6 KiB
Text
DEFINE TERNARY="BYTE"
|
|
DEFINE FALSE="0"
|
|
DEFINE MAYBE="1"
|
|
DEFINE TRUE="2"
|
|
|
|
PROC PrintT(TERNARY a)
|
|
IF a=FALSE THEN Print("F")
|
|
ELSEIF a=MAYBE THEN Print("?")
|
|
ELSE Print("T")
|
|
FI
|
|
RETURN
|
|
|
|
TERNARY FUNC NotT(TERNARY a)
|
|
RETURN (TRUE-a)
|
|
|
|
TERNARY FUNC AndT(TERNARY a,b)
|
|
IF a<b THEN RETURN (a) FI
|
|
RETURN (b)
|
|
|
|
TERNARY FUNC OrT(TERNARY a,b)
|
|
IF a>b THEN RETURN (a) FI
|
|
RETURN (b)
|
|
|
|
TERNARY FUNC IfThenT(TERNARY a,b)
|
|
IF a=TRUE THEN RETURN (b)
|
|
ELSEIF a=FALSE THEN RETURN (TRUE)
|
|
ELSEIF a+b>TRUE THEN RETURN (TRUE)
|
|
FI
|
|
RETURN (MAYBE)
|
|
|
|
TERNARY FUNC EquivT(TERNARY a,b)
|
|
IF a=b THEN RETURN (TRUE)
|
|
ELSEIF a=TRUE THEN RETURN (b)
|
|
ELSEIF b=TRUE THEN RETURN (a)
|
|
FI
|
|
RETURN (MAYBE)
|
|
|
|
PROC Main()
|
|
BYTE x,y,a,b,res
|
|
|
|
x=2 y=1
|
|
FOR a=FALSE TO TRUE
|
|
DO
|
|
res=NotT(a)
|
|
Position(x,y) y==+1
|
|
Print("not ") PrintT(a)
|
|
Print(" = ") PrintT(res)
|
|
OD
|
|
|
|
y==+1
|
|
FOR a=FALSE TO TRUE
|
|
DO
|
|
FOR b=FALSE TO TRUE
|
|
DO
|
|
res=AndT(a,b)
|
|
Position(x,y) y==+1
|
|
PrintT(a) Print(" and ") PrintT(b)
|
|
Print(" = ") PrintT(res)
|
|
OD
|
|
OD
|
|
|
|
y==+1
|
|
FOR a=FALSE TO TRUE
|
|
DO
|
|
FOR b=FALSE TO TRUE
|
|
DO
|
|
res=OrT(a,b)
|
|
Position(x,y) y==+1
|
|
PrintT(a) Print(" or ") PrintT(b)
|
|
Print(" = ") PrintT(res)
|
|
OD
|
|
OD
|
|
|
|
x=20 y=5
|
|
FOR a=FALSE TO TRUE
|
|
DO
|
|
FOR b=FALSE TO TRUE
|
|
DO
|
|
res=IfThenT(a,b)
|
|
Position(x,y) y==+1
|
|
Print("if ") PrintT(a)
|
|
Print(" then ") PrintT(b)
|
|
Print(" = ") PrintT(res)
|
|
OD
|
|
OD
|
|
|
|
y==+1
|
|
FOR a=FALSE TO TRUE
|
|
DO
|
|
FOR b=FALSE TO TRUE
|
|
DO
|
|
res=EquivT(a,b)
|
|
Position(x,y) y==+1
|
|
PrintT(a) Print(" equiv ") PrintT(b)
|
|
Print(" = ") PrintT(res)
|
|
OD
|
|
OD
|
|
RETURN
|