Erlang, Oz/Mozart, Prolog, 単一化
2008-01-02


標題: Erlang, Oz/Mozart, Prolog, 単一化
---
 Erlangのこと、あれこれやってたから、弾さんのコメントがあった。
[URL]
そろそろerlangについて一言いっとくか
で、
--- ここから ---
変数束縛が
Variable = Value.

なのに、関数定義が
function(Aargument) -> blah, blah, blah.

てのはどうよ?
--- ここまで ---
と書いているが、弾さん、こんなのさ、どうよ?と挑発されたら、「お前がバ
カ」の一言で終わり。\(^O^)/
 = が単なる変数束縛だと思っているところが、もう、アウト!\(^O^)/
 これ、ココロは、Prologの単一化(ユニフィケーション, unification)なん
だよ。だから、関数定義とは別の記号を使っているんだと思うけどね。
 ま、個人的には同じ記号だろうが別の記号だろうが、どうでもいいことだけ
ど、変数の束縛は単一化の特殊ケースだということは、知っておいていいと思
う。
 HaskellやOCamlなどもそう思うし、Erlang, Oz/Mozart(MozartはOzの実装)
もそうだけど、Prolog以後のヨーロッパの言語って、Prolog的なものをうまく
入れてるなと思う。これらの言語にあるパターンマッチは、おれには全部
Prologの単一化の簡略版に思えるからね。

 HaskellもOCamlもErlangもそうだけど、このパターンマッチは、Prologとは
違って、片方向なんだよね。
[URL]
Joe Armstrong著「Programming Erlang: Software for a Concurrent World」
では、= の動作は、Prologの単一化でバックトラックがないものくらいに考え
てくれなんて脚注があるが、片方向だと、フツー、単一化とは言いがたいので、
それでパターンマッチだといってるんだろうね。言葉も一般向けだし。
 他の言語の = が片方向なのに比べ、Ozの = は双方向になっている。どうい
う意味かといえば、Ozで、X, Z, Bが宣言はされているが、未束縛だとすると、

[X 'b' Z] = ['a' B 'c']

と書いたら、Xは'a'、Zは'c'、Bは'b'になる。
 ちゃんとした単一化だから。= の左辺と右辺の両方を書き換えてマッチさせ
ようとしているわけ。Oz言語の仕様を実装したMozartでやると実際そうなる。
プログラミングスタイルとしては、推奨されないようだが。
 この辺のことは、たびたび紹介しているCTM、つまり、
[URL]
セイフ・ハリディ, ピーター・ヴァン・ロイ, 羽永洋訳「コンピュータプログ
ラミングの概念・技法・モデル」
でアルゴリズムも含めて詳しく書いてある。その他ぼくが書いたCTMのことは、
ウェブやブログにつけている検索窓に CTM を入れて検索してもらえば。
 Oz/Mozart, CTMの補足については、このあと別に書く。

 で、ふと、思ったのが、いま、日本では関数型言語が注目されているなどと
いうが、最近、関数型言語に触れた人は、Prologや単一化や論理型プログラミ
ングや制約プログラミングなど、全然、知らないんじゃないかと。
 弾さんですら、あんなこと書いているくらいだし。\(^O^)/
 おれも、ほとんど知らないけどさ。\(^O^)/
 知らないけど、知ったことにして、人に薦めて焚きつけてしまうのがおれの
すごいところ。\(^O^)/
 そこで、我が情報省は、緊急アンケートをした。\(^O^)/
 関数型言語をかじった人、1000人に聞きました。
 おい、日本にかじった奴、1000人もいないと思うぞ。
 そ、そうか。^^; じゃ、100人に聞きました。あなたは、Prologや単一化や
論理型プログラミングを知っていますか?
 そしたら、あなた、100人中3.5人しか知りませんでした。\(^O^)/
 ほんとかよ、そのアンケート。
 まあ、そういうことにしないと後の話につながらないので、テキトーよ。こ

続きを読む


コメント(全3件)
コメントをする


記事を書く
powered by ASAHIネット