我是Prolog的新手,我遇到了问题。我有以下事实:
_________________
likes(a,apple).
likes(a,banana).
likes(a,orange).
_________________
我的查询将是:
counts(a,Var).
其中Var = [apple,banana,orange]
。我不希望以这种方式
Var=apple ;
Var=banana;
Var=orange;
任何建议或帮助将不胜感激。提前致谢。
答案 0 :(得分:1)
我会求助于全能的findall/3
来解决你的问题。
?- findall(Fruit, likes(a, Fruit), Fruits), length(Fruits, N).
Fruits = [apple,banana,orange]
N = 3
因此,您的counts(a, Var)
只是一个findall/3
电话(即使它确实收集而非计数):
counts(Person, Fruits) :- findall(Fruit, likes(Person, Fruit), Fruits).
结果你得到以下结果:
?- counts(a, Var).
Var = [apple,banana,orange]
答案 1 :(得分:0)
如果我理解正确的话,你想要计算一些像水果一样的实体数量。那么,代码将是这样的:
likes(a,apple).
likes(a,banana).
likes(a,orange).
counts(a, [_], 1).
counts(a, [H|T], Count) :- likes(a, H), counts(a, T, Count1), Count is 1 + Count1, !.