PrologでまったりPart 2
■ このスレッドは過去ログ倉庫に格納されています
0564デフォルトの名無しさん
2006/05/29(月) 03:46:21自分自身の引数として受け取った値(構造体)を直接参照できないと、
真の判定はできませんね。
ゴールundefinedが実行されるときControlStackにundefined構造体が積まれ
そのオフセット8バイト目(例えば)からが第一引数へのポインターであって
この値が-1(これも例えば)の時は変数である。だから、この値を参照すれば
よい。というように。Prologマシンでない限りこのような参照は
不可能でしょう。
undefined(X) :- not(functor(X,_,_)).
も考えられますが、これは、functor/3が偽でなく、
例外処理が発生しますので、この記法では実行が停止してしまいます。
仮に Exception Handlerが
例外処理(_ゴール,_例外実行) の書式だとすると、
undefined(X) :- not(例外処理(functor(X,_,_),fail)).
なら判定はできるでしょう。しかし、
考えてみればvar/1とfunctor/3のどちらが原初的な述語かという
ことになり、このような定義は解になっていない気がします。
■ このスレッドは過去ログ倉庫に格納されています