'c']と書いたら、Xは'a'、Zは'c'、Bは'b'になる。左辺と右辺の両方を書き換えてマッチさせようとしているわけ。Oz言語の仕様を実装したMozartでやると実際そうなる。プログラミングスタイルとしては、推奨されないようだが。羽永洋訳「コンピュータプログラミングの概念・技法・モデル」でアルゴリズムも含めて詳しく書いてある。入れて検索してもらえば。CTMの補足については、このあと別に書く。触れた人は、Prologや単一化や論理型プログラミングや制約プログラミングなど、全然、知らないんじゃないかと。弾さんですら、あんなこと書いているくらいだし。\(^O^)/おれも、ほとんど知らないけどさ。\(^O^)/知らないけど、知ったことにして、人に薦めて焚きつけてしまうのがおれのすごいところ。\(^O^)/そこで、我が情報省は、緊急アンケートをした。\(^O^)/関数型言語をかじった人、1000人に聞きました。おい、日本にかじった奴、1000人もいないと思うぞ。100人に聞きました。あなたは、Prologや単一化や論理型プログラミングを知っていますか?そしたら、あなた、100人中3.5人しか知りませんでした。\(^O^)/ほんとかよ、そのアンケート。いうことにしないと後の話につながらないので、テキトーよ。これ、広告屋やマーケ屋がやってるのと同じね。\(^O^)/それはいいとして、3.5人の0.5人って何だよ。あ、それは、答えてくれたのが、まだ、胎児だったんです。\(^O^)/超天才だろ、その子。国家で保護して日本の救世主にしろ。なんでもいいけど、そういうところで、まっとうなカリキュラムを持ってるところだと、関数型を教えて論理型を教えないなんて、おれの常識からは、考えられない。関数型言語ブームで論理型がさっぱり忘れ去られているとすれば、バランスを欠いていると思えるのね。それが、20年足らずでこのテイタラク。世界最高水準だったコンパイラ技術を捨て、プロセッサ技術を捨て、論理型プログラミング技術を捨て、ああ、日本はどうなってしまうんだ(爆)。\(^O^)/大体ね、関数型を知ってて、論理型を知らないなんて、ドラエモンは知ってるのに、サザエさんを知らないみたいなもんだろ。ポケモンは知ってるのに、ゴルゴ13を知らないみたいなもんだ。わからんけど、少しはニュアンスは伝わるかな。\(^O^)/ヨーロッパは、Prolog的なものを以後の言語に入れているし、AIブーム時にLispが主流だったアメリカでもLispの中に入れている。Lispには最初から入っているね。PrologまっとうなLisper/Schemerなら、みんなPrologをよく知ってるから、LispでPrologを書くのは定番化している。---今回、一番掘り出し物だと思ったのが、神戸大学のLispマシンとPrologマシンの話。高水準言語マシンを知らない人は、ご一読を。---とかもあったのよね。欧米(日本以外では?)では、Prologや論理型プログラミングが脈々と受け継がれているかといえば、計算モデルとして重要だし、面白いということもあるし、制約プログラミングの話もあるし、Prologの非決定性の探索は魅力的だし、現実の応用でも問い合わせ言語に使われたりしてきたから。上記の本でも、AI的な探索手法の解説で、Prolog的な探索を実装しているわけ。さっき紹介したAllegroは、RDFやオントロジーの検索にProlog的なものを使っている。それくらい、この辺の話は、重要なのよ。各種認識やら、いまますます重要になっていますし、今後もますます重要になります。したがって、AI的なことを知っておくのは、これからの技術者には非常に重要なことだと思っています。---というのは、ほんとの気持ち。今回、Prologや単一化のことを検索したら、面白いものがあった。非常にすばらしいと思ったので紹介する。http://www2.biglobe.ne.jp/~optimist/computing/prolog.htmlPrologとhttp://www2.biglobe.ne.jp/~optimist/computing/unification.html単一化(unification)をどうぞ。ささいな間違いがあったので、作者の古田さんに連絡したら、ソッコーで修正してくださった。ありがとうございます。前者は、簡単なPrologのプログラムがブラウザから直接実行できる。なんとJavaScriptでPrologを書いてあるのね。\(^O^)/後者は、単一化の解説。数学的な記述なので、受け付けない人もいるかもしれないけれど、単一化とはどういうことかきちんと書いてある、わかりやすい解説。この解説でいう単一化代入。Ozの場合は、データフロー変数や部分値があるから、もうひとひねりあるけれどね。できて2、3年のときにお邪魔したことがある。非常にきれいなキャンパスだった。これを書いた槫松(くれまつ)先生の講義のページhttp://www.fujita.soft.iwate-pu.ac.jp/prof_dir/kure/lectures.htmlをみると、過去の資料扱いになっているから、もう、直接はPrologは教えてないかもしれないね。http://www.fujita.soft.iwate-pu.ac.jp/prof_dir/kure/Lecture/Lisp/lisptop.htmlに、Lispもある。これがまっとうなカリキュラムだよ。\(^O^)/いまは自然言語処理のほうの授業に力を入れているようだが、そういう方面をやると、LispやProlog的なものはやらざるを得ないから、その過程で独習させているのかもしれない。脱線するが、槫松先生の属する藤田ハミド先生の研究室のウェブhttp://www.fujita.soft.iwate-pu.ac.jp/index.htmlをみると、「宮沢賢治プロジェクト」なるものをやってるね。宮沢賢治の地元!プロジェクトの目標は、「宮沢賢治自身をコンピュータ上に再現する!」すごーい。\(^O^)/こういうの、どんどんやってほしいね。地元、お膝元といえば、ヨーロッパではお膝元ということもあって、Prologは実用に使われているし、実装はいまでも改良されている。Prologの実装一覧は、http://lang.x0.com/logic/prolog/proc.htmPrologリンク集:処理系がよさげ。その上のレベルhttp://lang.x0.com/logic/index.html論理型言語リンク集をみると、Prolog以外にもいくつかある。Mercuryは、CTMでも出てくるが、Goedelなんてのもあるのね。Prologの処理系に戻ると、日本でも、http://www.kprolog.com/で、K-Prologという処理系を作って売ってるhttp://www.kprolog.com/KLS/株式会社KLS研究所という会社があるのね。http://www.ifcomputer.com/IFProlog/home_jp.htmlのほうは、日本支店か代理店っぽいけれど。Prologは、両方ともスウェーデンの組織が配ってるね。国はスウェーデンなのだろうか。Prologというのもある。これもリストにはないけど、KL1は、第五世代コンピュータプロジェクトで作られたPrologを大幅拡張した言語。第五世代コンピュータプロジェクトの総括は、http://iiyu.asablo.jp/blog/2006/08/10/479111第五世代コンピュータプロジェクトは死なず!\(^O^)/で紹介したので、暇なら読んでみて。KL1は、いま、KLICとして存在しているけれど、ICOTで開発した高水準言語マシンは、稼動するものが現存しているのだろうか。文化財として保存しておいてほしいんだけどね。その他、第五世代コンピュータについては、http://ja.wikipedia.org/wiki/第五世代コンピュータを参照。おれさまが2008年の最初に論理型プログラミングのことを書いたから、今年は論理型プログラミングの当たり年になるぞ。)に転載したものから。単一化で書くといった補足。プログラミング言語Ozについては、http://ja.wikipedia.org/wiki/Oz_(プログラミング言語)http://en.wikipedia.org/wiki/Oz_programming_languageをどうぞ。日本語は英語の翻訳みたいですね。英語のほうがコードも少し載ってます。Systemをどうぞ。羽永洋訳「コンピュータプログラミングの概念・技法・モデル」の補足については、今回探したら、CTMの超超超ダイジェストのような資料がありました。