このブログの更新は Twitterアカウント @m_hiyama で通知されます。
Follow @m_hiyama

メールでのご連絡は hiyama{at}chimaira{dot}org まで。

はじめてのメールはスパムと判定されることがあります。最初は、信頼されているドメインから差し障りのない文面を送っていただけると、スパムと判定されにくいと思います。

参照用 記事

Erlang、ほんとに困るのか?

id:lethevertさんからもトラックバックで、「Erlangのとても困ったところ」(「単一代入」「階層的パッケージ」)にご指摘をいただきました。

これは単一代入のせいではないですよ。
そうではなくて、Erlangの = は代入ではなくてパターンマッチだということからくる問題です。

これは例えば:


X = 1, % (1) Xはここで初出
X = 2, % (2) 2を代入したい
がうまくいかないのは、(2)のところで 1 = 2 (1と2のマッチング)が失敗するせいだ、ってハナシですよね。そんなメカニズムにより結局は変数の書き換えが禁止されることを「単一代入」という言い方をするんじゃないの?

Prologに関しては、そんな感じで「単一代入」を使っていたような気がするんだけど…(ガサゴソ)… 今はとうてい手に入りそうにない金田悠紀夫・著『Prologマシン』(森北出版、1992)に(ブラケット内は檜山):

[Prologが]他言語と異なるのは[箇条書き1から3を省略] 4. 変数への代入は未定義変数に対して1回だけ行われる単一代入方式であること。

なんて記述がありました。Erlangのマッチングって、Prologと同じようなもんじゃないの?



パッケージに関しては:

それは言いがかりです。Javaだって同じ仕様ですよ。

これは「言いがかり」といわれてもしょうがないですね。というのも、Erlangの仕様に不整合も理不尽さもありませんから。僕が何も調べずに試してみて、ムッとしたのは、根拠のない先入観があったせいです。それは:

  1. 自分が作ったモジュールが、名前空間のルートに配置されるとは思わなかった。
  2. io:*、lists:* などが自由に使えるのは、システム付属のライブラリは暗黙にインポートされるからだと思っていた。
  3. io:*、lists:* を上書きしてないのに、何で見えなくなるんだ? ムカッ!

「mymoduleが.mymoduleと同じ」とか、「-import(io)すればいい」とかは、後から知ったことです。はい、早とちりで感情的になり失礼しました。