75 lines
1.2 KiB
Go
75 lines
1.2 KiB
Go
package main
|
|
|
|
import "fmt"
|
|
|
|
type trit int8
|
|
|
|
const (
|
|
trFalse trit = iota - 1
|
|
trMaybe
|
|
trTrue
|
|
)
|
|
|
|
func (t trit) String() string {
|
|
switch t {
|
|
case trFalse:
|
|
return "False"
|
|
case trMaybe:
|
|
return "Maybe"
|
|
case trTrue:
|
|
return "True "
|
|
}
|
|
panic("Invalid trit")
|
|
}
|
|
|
|
func trNot(t trit) trit {
|
|
return -t
|
|
}
|
|
|
|
func trAnd(s, t trit) trit {
|
|
if s < t {
|
|
return s
|
|
}
|
|
return t
|
|
}
|
|
|
|
func trOr(s, t trit) trit {
|
|
if s > t {
|
|
return s
|
|
}
|
|
return t
|
|
}
|
|
|
|
func trEq(s, t trit) trit {
|
|
return s * t
|
|
}
|
|
|
|
func main() {
|
|
trSet := []trit{trFalse, trMaybe, trTrue}
|
|
|
|
fmt.Println("t not t")
|
|
for _, t := range trSet {
|
|
fmt.Println(t, trNot(t))
|
|
}
|
|
|
|
fmt.Println("\ns t s and t")
|
|
for _, s := range trSet {
|
|
for _, t := range trSet {
|
|
fmt.Println(s, t, trAnd(s, t))
|
|
}
|
|
}
|
|
|
|
fmt.Println("\ns t s or t")
|
|
for _, s := range trSet {
|
|
for _, t := range trSet {
|
|
fmt.Println(s, t, trOr(s, t))
|
|
}
|
|
}
|
|
|
|
fmt.Println("\ns t s eq t")
|
|
for _, s := range trSet {
|
|
for _, t := range trSet {
|
|
fmt.Println(s, t, trEq(s, t))
|
|
}
|
|
}
|
|
}
|