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

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

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

参照用 記事

単なるデータとしての項

項(term)の話をします。項については「『形式的』とは何だろう」を見てください。

Lispの主たるデータがリストであることはよく知られているけど、Prologのデータが項であることはあまり強調されませんね。論理型言語であることが表に出過ぎるせいかもしれない。あるいは、シンタックスシュガーが割と充実しているため、「なんでも項」というポリシーが(表層的には)薄められているのかもしれない。

[a, b, c]というProlog流リストは中置演算子「.」で書くと、(a . (b . (c . [ ])))であり、関数記号(Prolog用語では関数子)dotを使うならdot(a, dot(b, dot(c, nil))) (nil=[ ])となります。便宜的略記([a, b, c]がその例)や中置演算子も使えるものの、基本は項形式なんですよ。

さて、「データとコードが同じ形式」というのは魅力的な特性だから、こだわる気持ちはわかるのだけど、このさい、単なるデータとしての項をそこらへんのプログラミング言語に入れたらどうなるだろうか?とか考えてみる。

例えば、JavaにListがあるけど、Lispにおけるリスト(S式)のような位置付けではなくて、単なる便利データですね。同様に、便利データとしてのTermがあってもいいような気がするわけ。

変数(論理変数というか形式変数というか、普通のプログラム変数とはちょっと違う)が使えれば、置き換え(substitution)やパターンマッチ(単一化;unification)ができるから、それなりに使い勝手はいいと思う。

パターンマッチは制御構造(高級なswitch/case)として使えると便利だったりするわけだから、そこらへんのプログラミング言語への外付けライブラリでは便利さに制限/限界があるだろうけど、AIっぽい応用とかでは使えそう。

僕としては、項の実物があると形式的体系(formal systems)の説明が楽になるのだけど…。