如何在Prolog中使用一系列事实限制参数的值?

  • 本文关键字:参数 事实 一系列 Prolog prolog
  • 更新时间 :
  • 英文 :


我想将查询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).

最新更新