:: streq [ dup vlen [ swap dup vlen ] dip = if [ 1 while [ uncons if [ [ swap uncons drop ] dip = if [ dup qlen 0 = if [ drop drop 1 0 ] [ swap 1 ] ] [ drop drop 0 0 ] ] [ drop drop 1 0 ] ] ] [ drop drop 0 ] ]
:: lower [ "" swap uncons while [ dup 65 >= [ dup 90 <= ] dip and if [ 32 + ] [] [ swap ] dip chr s+ swap uncons ] drop ]
:: upper [ "" swap uncons while [ dup 97 >= [ dup 122 <= ] dip and if [ 32 - ] [] [ swap ] dip chr s+ swap uncons ] drop ]
:: bitnot [ dup nand ]
:: bitand [ nand bitnot ]
:: bitor [ bitnot swap bitnot nand ]
:: bitxor [ over over bitnot bitand [ swap bitnot bitand ] dip bitor ]
:: rev [ [] swap uncons while [ [ swap ] dip swap cons swap uncons ] drop ]