本文介绍了如何使用一系列事实限制 Prolog 中参数的值?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我想将查询property(X, use, Y)
限制为列表[a,b,c]
中Y
的值代码>.c/1
仅适用于 Y
的那些值.我认为下面的方法会起作用,但它不起作用.
I want to restrict the query property(X, use, Y)
to values of Y
in the list [a,b,c]
.c/1
is true for only those values of Y
.I thought the following would work, but it doesn't.
c(a).
c(b).
c(c).
property(X, use, Y).
c(Y).
以下语句只产生false
.
person(1).
property(1, use, _).
我正在使用 Problog,但我在这里没有使用任何 Problog 函数,所以我想我对统一有一些误解.
I'm using Problog, but I'm not using any Problog functions here, so I think I am misunderstanding something about unification.
我认为 c(Y)
会生成列表,而 Y
会统一所有事实.
I thought c(Y)
would generate the list and Y
would be unified across the facts.
更新这似乎是 Problog 特有的问题,如下所示.
UpdateThis does seem to be an Problog-specific issue as the following illustrates.
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).
这篇关于如何使用一系列事实限制 Prolog 中参数的值?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!