将Prolog目标作为输入放在第一个参数位置,并返回此目标在第二个参数位置成功的次数

时间:2015-09-21 11:45:39

标签: count prolog meta-predicate

正如标题所说,我想编写一个执行此操作的程序。

一个例子是:

?- count(member(X,[1,2,3]), N). 

N = 3 

Yes

但不仅是成员的构建,还有一些运营商,如:

?- count(17 =:= 12 + 5, N). 

N = 1 

Yes

有人可以帮助我开始吗?

2 个答案:

答案 0 :(得分:2)

试试这个:

?- findall(., Goal, Ls), length(Ls, L).

示例:

?- findall(., member(X,[1,2,3]), Ls), length(Ls, L).
L = 3,
... .

答案 1 :(得分:0)

库(aggregate)已经实施,可以为您的问题提供解决方案等等......

?- aggregate(count, X^member(X,[1,2,3]), N).
N = 3.

?- aggregate(count, 17 =:= 12 + 5, N).
N = 1.