Prolog 增加数量

Prolog 增加数量,prolog,logic,logic-programming,Prolog,Logic,Logic Programming,以给定的数据库为例 input(80). input(30). input(25). input(90). 计算大于50乘以100的输入量,限制为仅接受/1个输入。 e、 g 我尝试了以下prolog代码来模拟计算函数,但没有成功: compute(I) :- input(G), G>50, I is I+100. I+100不能按我的意愿工作。Prolog正在逐个搜索匹配项,并返回每个输入的查询结果,而不是所有输入的查询结果。要收集所有匹配值,可以使用bagof、setof或find

以给定的数据库为例

input(80).
input(30).
input(25).
input(90).
计算大于50乘以100的输入量,限制为仅接受/1个输入。 e、 g

我尝试了以下prolog代码来模拟计算函数,但没有成功:

compute(I) :- input(G), G>50, I is I+100.

I+100不能按我的意愿工作。

Prolog正在逐个搜索匹配项,并返回每个输入的查询结果,而不是所有输入的查询结果。要收集所有匹配值,可以使用
bagof
setof
findall
元谓词。 下面是执行您定义的操作的代码:

input(80).
input(30).
input(25).
input(90).

compute(I) :- 
    findall(X, (input(X), X>50), L), % Find all X's that are 'input' and >50 into L
    length(L,Len),                  % Find the length of L and put into Len
    I is Len * 100.                 % I is Len times 100

您的
compute
无法工作,因为逻辑显示,*
compute(I)
如果
G
是输入,
G>50
,并且
I是I+100
I
没有初始值,如果有,它会第一次成功
G>50
。您确实需要所有可能值的聚合,这可以通过
findall
完成。
input(80).
input(30).
input(25).
input(90).

compute(I) :- 
    findall(X, (input(X), X>50), L), % Find all X's that are 'input' and >50 into L
    length(L,Len),                  % Find the length of L and put into Len
    I is Len * 100.                 % I is Len times 100