同じく、たなかさんのねた: 逆ポーランド電卓
Schemeで書く場合でも、副作用を用いないで書くように心掛ければ、 リスト処理のよい練習になるのではないでしょうか。
勉強のために作っていらっしゃるそうなので、 邪魔をしないようにerlangで。
$ cat rpcalc.erl -module(rpcalc). -export([rpcalc/1]). op (X, M, N) -> case X of '+' -> M + N; '-' -> M - N; '*' -> M * N; '/' -> M / N; _ -> unknown end. rpcalc ([], N, S) when is_number(N) -> [N | S]; rpcalc ([], X, [M, N | S]) -> [op(X, N, M) | S]; rpcalc ([H | T], N, S) when is_number(N)-> rpcalc(T, H, [N | S]); rpcalc ([H | T], X, [M, N | S]) -> rpcalc(T, H, [op(X, N, M) | S]). rpcalc ([H | T]) -> rpcalc(T, H, []). $ erl 1> c(rpcalc). {ok,rpcalc} 2> io:fwrite("~w~n", rpcalc:rpcalc([2, 3, '*', 4, 5, '+', '*'])). 54 ok
パターンマッチ万歳。
blog comments powered by Disqus