次のDCGルールがあると仮定します。
factor(X) --> "(", expr(X), ")".
通常、これは次のように変換されます。
factor(X, A, B) :-
[40|C] = A, expr(X, C, D), [41|B] = D.
Prologシステムはそれを次のように翻訳することを許可されますか?つまり
、統一を頭と目標に統合することはできますか?
factor(X, [40|A], B) :-
expr(X, A, [41|B]).
DCG拡張が安定しない場合
、expr呼び出しの3番目の引数に[41|B]を入れることは許可されません。
しかし、私は不動が整っていると思うので、すべてが大丈夫なはずですか?
さよなら
PS:不動の非公式な定義については、以下を参照してください
。Richard O'Keefe、2009年:
「Prologプログラミングにおける「不動」という用語の発明者として、
私はそれを支持する必要があります。不動は、基本的に
、述語を強制的に下げることができないことを意味します。
出力引数を間違って入力することによる間違ったパス。」
http://blog.gmane.org/gmane.comp.ai.prolog.swi/month=20090301
PSS:他のDCG変換については、たとえば最新の
DCG標準提案を参照してください。付録には、DCGトランスレータの
ソースコードが含まれています
。ISO/ IEC DTR 13211–3:2006
明確な句の文法規則
KlausDaessler
2012年11月20日
N238DINドラフト2012-11-20