逆ポーランド電卓

新しい言語を学ぶ時には必ず作る逆ポーランド電卓です。エラーチェックはありません。エラーチェックを追加する元気がありませんでした。
ファイル: rpcalc.erl

-module(rpcalc).
-export([rpcalc/2, main/1]).

rpcalc([Ans | []], []) -> Ans;
rpcalc(Stack, ["+" | Ss]) -> rpcalc(op_plus(Stack),  Ss);
rpcalc(Stack, ["-" | Ss]) -> rpcalc(op_minus(Stack), Ss);
rpcalc(Stack, ["*" | Ss]) -> rpcalc(op_mult(Stack),  Ss);
rpcalc(Stack, ["/" | Ss]) -> rpcalc(op_div(Stack),   Ss);
rpcalc(Stack, [S   | Ss]) -> rpcalc(push(Stack, S),  Ss).

push(Stack, S) ->
    [element(1, string:to_integer(S)) | Stack].

op_plus ([A, B | Stack]) -> [B + A   | Stack].
op_minus([A, B | Stack]) -> [B - A   | Stack].
op_mult ([A, B | Stack]) -> [B * A   | Stack].
op_div  ([A, B | Stack]) -> [B div A | Stack].
    
main(Args) ->
    Ss = lists:append(lists:map(fun(A) -> string:tokens(A, " ") end, Args)),
    Ans = rpcalc([], Ss),
    io:format("~.10B~n", [Ans]).

実行例:

$ escript rpcalc.erl "1 2 + 4 * 2 /"
6

んー、やっぱり静的型欲しいなぁ。Haskellが恋しいです。
参照: 逆ポーランド電卓をつくってみました - 趣味的にっき