首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >不在列表中的数字的Prolog和

不在列表中的数字的Prolog和
EN

Stack Overflow用户
提问于 2012-10-23 21:18:29
回答 2查看 211关注 0票数 2

在gnu Prolog中,我正在尝试收集大学顾问程序中所有大学学分的总和。

目前,它像这样返回信用的数量:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
| ?- totalCredits(joe, X).

X = 3 ? ;

X = 3 ? ;

X = 3 ? ;

X = 1 ? ;

X = 3 ? ;

X = 3 ? ;

no

下面是代码示例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
totalCredits(Student, Credits) :-
    class(Class, _, _),
    creditFor(Student, Class, _),
    class(Class, _, Credits).

所以我的问题是,我如何总结所有这些结果?我对prolog完全陌生,以前只使用过函数式语言,所以我可能完全遗漏了一些东西。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-10-23 21:29:52

你可以collect a list of credits,然后sum it:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
totalCredits(Student, Total) :-
  findall(Credits, creditFor(Student, _Class, Credits), ListOfCredits),
  sum_list(ListOfCredits, Total).

编辑后评论,更正一下:加入关系!

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
totalCredits(Student, Total) :-
  findall(Credits,
    (creditFor(Student, Class, _),
     class(Class, _, Credits)), ListOfCredits),
  sum_list(ListOfCredits, Total).
票数 0
EN

Stack Overflow用户

发布于 2012-10-23 21:25:40

使用findall获取所有积分,然后对这些积分求和。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
findall(C, creditFor(Student, _, C), Credits),
sum(Credits, Sum).

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

这里,sum是一个求和谓词,我将把它留给您;它应该非常类似于它的函数式对应项。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13039404

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文