hello| define split<1> as [ set {} -> list| set '' -> word| set 0 -> i| do [ do [ set variable list + {variable word;} -> list| set '' -> word| ] else [ set variable word + argument #1{variable i} -> word| ] if argument #1{variable i} = ' '| set variable i + 1 -> i| ] until variable i = do len| do skip else set variable list + {variable word;} -> list if variable word = ''| return variable list| ]| define is_number<1> as [ set '0123456789' -> numbers| set 0 -> i| do [ set 0 -> j| set false -> num| do [ do set true -> num else skip if argument #1{variable i} = variable numbers{variable j}| set variable j + 1 -> j| ] until variable j = do len| do skip else return false if variable num| set variable i + 1 -> i| ] until variable i = do len| return true| ]| define calc<3> as [ do return argument #2 + argument #3 if argument #1 = '+'| return 'error'| ]| define unfold<1> as [ // In case there are 0, 1 or 2 arguments do return 'error' if do len = 0| do [ do return do int if do "is_number"| return 'error'| ] if do len = 1| do return 'error' if do len = 2| set argument #1{0} -> op| set {} -> n1l| set 1 -> n| set 0 -> k| do [ set variable k+1 -> k| set variable n1l + {argument #1{variable k};} -> n1l| do skip else set variable n+2 -> n if do "is_number"| ] until variable n = variable k| set {} -> n2l| set variable n+1 -> n| do [ set variable k+1 -> k| set variable n2l + {argument #1{variable k};} -> n2l| do skip else set variable n+2 -> n if do "is_number"| ] until variable n = variable k| do print| set do "unfold" -> n1| do return 'error' if do str='error'| set do "unfold" -> n2| do return 'error' if do str='error'| do print|skip| return do "calc"| ]| set do input<':';> -> x| set do "split" -> list| do print;>| goodbye|