2

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

4

2 回答 2

0

您可以收集学分列表,然后对其求和

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).
于 2012-10-23T21:29:51.760 回答
0

用于findall获得所有学分,然后将它们相加。

findall(C, creditFor(Student, _, C), Credits),
sum(Credits, Sum).

(我希望我已经creditFor正确理解了您的谓词的含义。)

sum是一个总和谓词,我将留给您;它应该与其功能对应物非常相似。

于 2012-10-23T21:25:39.540 回答