OS X 7 で SWI-Prolog バージョン 6.4.1 を使用していますが、述語で次の予期しない動作が発生していますcurrent_functor/2
。
事実を考えると
p(a).
q.
クエリに対するこれらの回答を取得します。
?- current_functor(p, Y).
Y = 1
?- current_functor(q, Y).
false.
?- current_functor(q, 0).
true.
2 番目と 3 番目のクエリが明らかに矛盾しているように見えるだけでなく、2 番目のクエリの失敗は、次のように説明されている SWI-Prolog リファレンス マニュアルと一致していないようですcurrent_functor/2
。
current_functor(?Name, ?Arity) Name を名前に、Arity をシステムに知られているファンクターのアリティに順次統合します。
述語がこのように機能している理由を理解できる人はいますか?
編集:
特定の0アリティのものを含め、述語が定義されているかどうかをテストするという私の特定の問題を解決するという点で、私は偽のアドバイスに従い、次のように書くことになりました:
current_pred(P) :-
current_predicate(P/_).