[Top Page][All Pages][Recent Changes]

archives/2005/09/07

Erlang/reverse-polish-notation-calculator

Category of Erlang

同じく、たなかさんのねた: 逆ポーランド電卓

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

パターンマッチ万歳。

WiLiKi/Blog

ねるWiki:NelDiary:2005-09-06にて原作者さまから反応が。

この割りきり方は、非常にセンスがよいなぁ、と感心しきり。

ずぼらなだけです。はい。

少しインスパイアーされたので、また、改造しよう。

おお、期待してます。

あ、でも、つぎはいろいろやってみたいので、kahua-webにするかも...

まあそんなことおっしゃらずに……

それにしても、ウェブアプリケーションサーバ(以下アプリケーションサーバ)かあ。 ここはレンタルサーバだからアプリケーションサーバは無理だろうなあ。 Apacheと共存とか(mod_proxyを使う?)、 アプリケーションサーバの再起動とかどうするねん。

まあ、アプリケーションサーバが使えたとしても、 kahua-webやUnCommonWebみたいなのは使わないだろうな。 私にとってウェブページで何かを公開するということは、 辺境探索の足跡みたいなものなので(こういう発想がオールドタイプ)。

もしアプリケーションサーバが可能なら、

くらいは試してみたい(yawsは手元の環境で起動中。埋め込みerlang萌え)。 どちらもモヒカンどころか北京原人が出そうなくらい辺境。

Zopeは絶対使わない候補。でもイントラネットではこっそりPloneを立ち上げていたり。


せっかくだから専用のページなぞつくってみる: WiLiKi/Blog

Memo/prompt

Memo/2005/09/05/promptの続き。

仮想端末でエスケープシーケンスの打ち方がわからないので(恥、 EmacsでC-qC-[を使って一時ファイルを作成。 OpenBSD-man:sourceで更新。

おお。緑色になった。昔のマイコンみたい。 そういえば私もDOSのころは環境変数PROMPTをいじってカラフルにしていた覚えが。

入力行狭っ。と思ったら、カーソルが被さったときは消えてくれるのですね。 RPS1なんて知りませんでした。メモメモ。

時間はどうなんでしょう。私の場合、 壁紙を1時間おきに変えるようにしているため、 仮想端末を透過させていると大体の時間がわかるので、 プロンプトには設定してません。

dateにしてもttyにしてもコマンドラインで叩けば出るので、 あとはコマンドプロンプトに設定するかどうかは単に使用頻度だけなんですよね。