本文介绍了如何使用一系列事实限制 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 中参数的值?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-15 00:00