: (-) ( brainfuck n -- brainfuck )
[ get-memory ] dip - 255 bitand set-memory ;
-: (?) ( brainfuck -- brainfuck t/f )
- get-memory zero? not ;
-
: (.) ( brainfuck -- brainfuck )
get-memory write1 ;
unknown = (.) => [[ "Invalid input" throw ]]
ops = inc-ptr|dec-ptr|inc-mem|dec-mem|output|input|debug|space
-loop = "[" {loop|ops}+ "]" => [[ second compose-all '[ [ (?) ] _ while ] ]]
+loop = "[" {loop|ops}+ "]" => [[ second compose-all '[ [ get-memory zero? ] _ until ] ]]
code = (loop|ops|unknown)* => [[ compose-all ]]