拿一个给定的数据库,例如
input(80).
input(30).
input(25).
input(90).
计算输入量超过50倍100,仅限于/ 1输入。 e.g。
%compute(?integer).
compute(I).
I = 200 %seeing as input(80) and input(90) matches the condition of being above 50
我尝试了以下prolog代码来模仿计算功能,但未成功:
compute(I) :- input(G), G>50, I is I+100.
I + 100无法正常工作。
答案 0 :(得分:1)
Prolog逐个搜索匹配项,并返回EACH输入的查询结果,而不是全部输入。要收集所有匹配值,您可以使用bagof
,setof
或findall
metapredicates。
以下是执行您定义的代码:
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