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

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

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

参照用 記事

「単なるデータとしての項」への補足

一昨日(2005-04-20)の「単なるデータとしての項」とは、「『形式的』とは何だろう」のノート「意味を持たないままの項」で述べているものです。

Prologのデータ型については、例えば、広井誠さんによる解説(http://www.geocities.jp/m_hiroi/prolog/prolog03.html)があります。

アトムと数値のリテラルを“定数記号”、関数子を“関数記号”と思えば、形式的体系における項の定義とまったく同じです。無名変数はProlog特有ですけど。

広井さんは、項が「述語と同じ形式になっているところが、ちょっとややこしい」と記述されています -- 「使用法として、あるいは意味的に区別するのがややこしい」ことは、まさにそのとおりですが、述語も算術式もリストも節も、構文としては項形式だと思ってよいのです。例えば:


retrieve( N, [Y | L], X) :-
N > 1, N1 is N - 1, retrieve( N1, L, X ).
は、「:-」をmedaka、「|」(リスト構成演算)をbar、「,」をand、「>」をgt、「-」をminusとでもすれば、次のように単一の項で書けます。

medaka(retrieve(N, bar(Y, L), X),
and(gt(N, 1), is(N1, minus(N, 1)), retrieve(N1, L, X)))

処理系の実装方式の問題ですが、内部的には「すべて項」にすればスッキリします(最適とは言えないでしょうが)。例えばLispで実装するなら、項をリストにすれば簡明。