Ternary logic: Difference between revisions

Line 3,467:
val .trSet = [false, null, true]
 
val .and = fn( .a, .b) {: switch[and] .a, .b {
case true, null:
case null, true:
case null: null
default: .a and .b
}}
 
val .or = fn( .a, .b) {: switch[and] .a, .b {
case false, null:
case null, false:
case null: null
default: .a or .b
}}
 
val .imply = fn( .a, .b) {: if(.a nor .b: not? .a; .b) }
 
# formatting function for the result values
# replacing null with "maybe"
# using left alignment of 5 code points
val .F = fn( .r): $"\{{nn [.r, "maybe"]:-5}}"
 
writeln "a not a"
for .a in .trSet {
writeln $"\{{.a:fn F;}} \({{not? .a:fn F)}}"
}
 
Line 3,496:
for .a in .trSet {
for .b in .trSet {
writeln $"\{{.a:fn F;}} \{{.b:fn F;}} \{{.and(.a, .b):fn F;}}"
}
}
Line 3,503:
for .a in .trSet {
for .b in .trSet {
writeln $"\{{.a:fn F;}} \{{.b:fn F;}} \{{.or(.a, .b):fn F;}}"
}
}
Line 3,510:
for .a in .trSet {
for .b in .trSet {
writeln $"\{{.a:fn F;}} \{{.b:fn F;}} \{{.imply(.a, .b):fn F;}}"
}
}
Line 3,517:
for .a in .trSet {
for .b in .trSet {
writeln $"\{{.a:fn F;}} \{{.b:fn F;}} \{{.a ==? .b:fn F;}}"
}
}
885

edits