Prolog数字总和不在列表中

时间:2012-10-23 21:18:29

标签: prolog

在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的新手,之前只使用过函数式语言,所以也许我完全错过了一些东西。

2 个答案:

答案 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).