tasks a-s
This commit is contained in:
parent
47bf37c096
commit
b83f433714
12433 changed files with 156208 additions and 123 deletions
|
|
@ -0,0 +1,33 @@
|
|||
procedure main()
|
||||
EvalRPN("3 4 2 * 1 5 - 2 3 ^ ^ / +")
|
||||
end
|
||||
|
||||
link printf
|
||||
invocable all
|
||||
|
||||
procedure EvalRPN(expr) #: evaluate (and trace stack) an RPN string
|
||||
|
||||
stack := []
|
||||
expr ? until pos(0) do {
|
||||
tab(many(' ')) # consume previous seperator
|
||||
token := tab(upto(' ')|0) # get token
|
||||
if token := numeric(token) then { # ... numeric
|
||||
push(stack,token)
|
||||
printf("pushed numeric %i : %s\n",token,list2string(stack))
|
||||
}
|
||||
else { # ... operator
|
||||
every b|a := pop(stack) # pop & reverse operands
|
||||
case token of {
|
||||
"+"|"-"|"*"|"^" : push(stack,token(a,b))
|
||||
"/" : push(stack,token(real(a),b))
|
||||
default : runerr(205,token)
|
||||
}
|
||||
printf("applied operator %s : %s\n",token,list2string(stack))
|
||||
}
|
||||
}
|
||||
end
|
||||
|
||||
procedure list2string(L) #: format list as a string
|
||||
every (s := "[ ") ||:= !L || " "
|
||||
return s || "]"
|
||||
end
|
||||
Loading…
Add table
Add a link
Reference in a new issue