2012-10-14 56 views

答えて

11

あなたはcurrent_predicate/1current_predicate/2またはpredicate_property/2を(最後のためにあなたはおそらくfunctor/3が必要になります)を使用することができます:

?- current_predicate(a/1). 
false. 

?- functor(A,a,1),predicate_property(A,visible). 
false. 

?- functor(A,a,1),current_predicate(_,A). 
false. 

?- assert(a(42)). 
true. 

?- current_predicate(a/1). 
true. 

?- functor(A,a,1),predicate_property(A,visible). 
A = a(_G136). 

?- functor(A,a,1),current_predicate(_,A). 
A = a(_G122). 

current_predicate/2predicate_property/2(可視で)成功した​​場合にはexists/1、のようになりますcurrrent_predicate/1が失敗している間に述語をオートロードすることができます

1

「旧式の方法」ですが、ISOで受け入れられました/2。以前の例のいくつかを再利用/ブラウズしている間にそれに遭遇する可能性があります。

例:

?- [user]. 
|: app([], Y, Y). 
|: app([X|Xs], Y, [X|Zs]) :- app(Xs, Y, Zs). 
|: % user://1 compiled 0,15 sec, 17 clauses 
true. 

?- clause(app(X,Y,Z),Body). 
X = [], 
Y = Z, 
Body = true ; 
X = [_G338|_G339], 
Z = [_G338|_G342], 
Body = app(_G339, Y, _G342). 
+2

は、これが唯一の公共財産と述語のためにISOに受け入れられています!デフォルトでは、静的コードでは機能しません。 – false

関連する問題