在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完全陌生,以前只使用过函数式语言,所以我可能完全遗漏了一些东西。
发布于 2012-10-23 21:29:52
你可以collect a list of credits,然后sum it:
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-23 21:25:40
使用findall
获取所有积分,然后对这些积分求和。
findall(C, creditFor(Student, _, C), Credits),
sum(Credits, Sum).
(我希望我已经正确理解了您的creditFor
谓词的含义。)
这里,sum
是一个求和谓词,我将把它留给您;它应该非常类似于它的函数式对应项。
https://stackoverflow.com/questions/13039404
复制相似问题