# MIT License, Copyright (c) 2022 Marvin Borner :import std/Combinator . # true true k ⧗ Boolean # false false ki ⧗ Boolean # inverts boolean value # equivalent of [0 ⇒ false] not! c ⧗ Boolean → Boolean ¬‣ not! :test (¬true) (false) :test (¬false) (true) # true if both args are true and? [[0 1 0]] ⧗ Boolean → Boolean → Boolean …⋀?… and? :test (true ⋀? true) (true) :test (true ⋀? false) (false) :test (false ⋀? true) (false) :test (false ⋀? false) (false) # true if not both args are true nand? [[1 0 1 false true]] ⧗ Boolean → Boolean → Boolean :test (nand? true true) (false) :test (nand? true false) (true) :test (nand? false true) (true) :test (nand? false false) (true) # true if one of the args is true or? m ⧗ Boolean → Boolean → Boolean …⋁?… or? :test (true ⋁? true) (true) :test (true ⋁? false) (true) :test (false ⋁? true) (true) :test (false ⋁? false) (false) # true if both args are false nor? [[1 1 0 false true]] ⧗ Boolean → Boolean → Boolean :test (nor? true true) (false) :test (nor? true false) (false) :test (nor? false true) (false) :test (nor? false false) (true) # true if args are not same bools xor? [[0 (1 false 0) 1]] ⧗ Boolean → Boolean → Boolean …^?… xor? :test (xor? true true) (false) :test (xor? true false) (true) :test (xor? false true) (true) :test (xor? false false) (false) # true if both args are same bools xnor? [[0 1 (1 0 true)]] ⧗ Boolean → Boolean → Boolean :test (xnor? true true) (true) :test (xnor? true false) (false) :test (xnor? false true) (false) :test (xnor? false false) (true) # if first arg is true, exec first exp; else second exp # this function is generally redundant # I personally just write (exp? case-T case-F) directly if [[[2 1 0]]] ⧗ Boolean → a → b → c …?…:… if :test (if true true false) (true) :test (true ? true : false) (true) :test (if false true false) (false) :test (false ? true : false) (false) # mathematical implies definition implies [[1 0 true]] ⧗ Boolean → Boolean → Boolean …⇒?… implies :test (true ⇒? true) (true) :test (true ⇒? false) (false) :test (false ⇒? true) (true) :test (false ⇒? false) (true) # mathematical iff (if and only if) definition iff xnor? ⧗ Boolean → Boolean → Boolean …⇔?… iff :test (true ⇔? true) (true) :test (true ⇔? false) (false) :test (false ⇔? true) (false) :test (false ⇔? false) (true)