在gnu Prolog中,我试图在大学顾问计划中收集所有大学学分的总和。
目前,它返回的信用数量如下:
| ?- totalCredits(joe, X).
X = 3 ? ;
X = 3 ? ;
X = 3 ? ;
X = 1 ? ;
X = 3 ? ;
X = 3 ? ;
no
这就是代码示例:
totalCredits(Student, Credits) :-
class(Class, _, _),
creditFor(Student, Class, _),
class(Class, _, Credits).
所以我的问题是如何总结所有这些结果?我是prolog的新手,之前只使用过函数式语言,所以也许我完全错过了一些东西。
答案 0 :(得分:0)
使用findall
获取所有学分,然后对其进行总结。
findall(C, creditFor(Student, _, C), Credits),
sum(Credits, Sum).
(我希望我已正确理解你的creditFor
谓词的含义。)
在这里,sum
是一个求和谓词,我将留给你;它应该与其功能对应物非常相似。
答案 1 :(得分:0)
您可以collect a list个积分,然后sum它:
totalCredits(Student, Total) :-
findall(Credits, creditFor(Student, _Class, Credits), ListOfCredits),
sum_list(ListOfCredits, Total).
评论后编辑,更正:加入关系!
totalCredits(Student, Total) :-
findall(Credits,
(creditFor(Student, Class, _),
class(Class, _, Credits)), ListOfCredits),
sum_list(ListOfCredits, Total).