我想将查询property(X, use, Y)
限制为列表[a,b,c]
中Y
的值。c/1
仅对Y
的值为真。
c(a).
c(b).
c(c).
property(X, use, Y).
c(Y).
下面的语句只产生false
。
person(1).
property(1, use, _).
我正在使用Problog,但我在这里没有使用任何Problog函数,所以我想我对统一有一些误解。
我认为c(Y)
将生成列表,而Y
将统一所有事实。
这似乎是一个特定于problog的问题,如下所示。
substance(methadone).
substance(heroin).
P::property(X,use,nicotine) :- %doesn't work
property(X,use,Z),
substance(Z),
P is 0.8.
property(X,use,nicotine) :- %works
property(X,use,Z),
substance(Z).
person(1).
substance(Y).
property(1, use, Y).
你可以这样写:
property(_X, use, Y) :-
c(Y).