module: rpn define function rpn() let (#rest s) = split("[ \t]",read-line(*standard-input*)); if (~s.empty?) process-line(s); end; rpn(); end; define function process-line(s) block() local method process-term(r,s) let op = block() assert(1 = s.size); $ops[s[0]]; exception() #f; end; add!(r, if (op) let (z,y) = values(r.pop,r.pop); op(y,z); else let (x,i) = string-to-float(s); assert(i = s.size); x; end); end; let r = reduce(process-term,make(),s); assert(1 = r.size); format-out("%d\n",r.pop); exception() format-out("error\n"); end; force-output(*standard-output*); end; define table $ops = {'+' => \+, '-' => \-, '*' => \*, '/' => \/}; block() rpn(); exception() end;