isZero := { [Z] => True; [<S,_>] => False }; add := { [Z] => { [y] => y } ; [<S,x>] => { [y] => add[x][<S,y>] } }; incr := add[<S,Z>]; two := <S,<S,Z>>; four := <S,<S,<S,<S,Z>>>>; if := { [True] => { [x] => { [_] => x } } ; [False] => { [_] => { [y] => y } } }; minusOne := { [Z] => Z; [<S,x>] => x }; puts "S is " S; puts "Z is " Z; puts "True is " True; puts "False is " False; puts "Is 0 zero?"; puts isZero[Z]; puts "Is 4 zero?"; puts isZero[four]; puts "2 + 4 = "; puts add[four][two]; puts "Is zero zero?"; puts if[isZero[Z]]["yes"]["no"]; puts "Is 0+1 zero?"; puts if[isZero[incr[Z]]]["yes"]["no"];