macro ++ out { += $out 1 } macro += out in { IF {$in is var} { __$LANG__+= $out $in } elseif {$in is cons} { __+= $out $in } else { ERROR "Invalid type for $in in +=. $in is [TYPE $in]; should be var or cons." } } macro __BRAINFUCK__+= out in { assert {$out is var} "Invalid type for $out in __BRAINFUCK__+=. $out is [TYPE $out]; should be var." assert {$in is var} "Invalid type for $in in __BRAINFUCK__+=. $in is [TYPE $in]; should be var." while $in { -- $in ++ $out } } macro -- out { -= $out 1 } macro -= out in { IF {$IN is var} { __$LANG__-= $out $in } elseif {$in is cons} { __-= $out $in } else { ERROR "Invalid type for $in in -=. $in is [TYPE $in]; should be var or cons." } } macro __BRAINFUCK__-= out in { assert {$out is var} "Invalid type for $out in __BRAINFUCK__+=. $out is [TYPE $out]; should be var." assert {$in is var} "Invalid type for $in in __BRAINFUCK__+=. $in is [TYPE $in]; should be var." while $in { -- $in -- $out } }