prolog - 如何对不同事实中的数字进行求和?

标签 prolog

假设我有一个游戏,其中有一个英雄和几个怪物。如果击败每个怪物,它们都会获得一定的积分。

total_score(Hero, Score):-
    defeated(Hero, Monster),
    score(Monster, Points),
    Score is Points.

monster(bat).
monster(skeleton).
monster(boss).

score(bat, 100).
score(skeleton, 100).
score(boss, 1000).

defeated(bob, bat).
defeated(bob, skeleton).
defeated(bob, boss).

如果我执行 future 的请求:

?- total_score(bob, Y).

我希望答案是:

Y : 1200.

但我得到的是:

Y : 100,
Y : 100,
Y : 1000.

我应该对total_score进行什么更改才能使其正常工作?我明白为什么会有这样的结果,但我真的不知道该怎么做才能总结事实。

最佳答案

好吧,我设法找到了解决方案,问题是我知道我可以使用 findall 和 sum_list,但我不知道如何将不同的关系连接在一起。经过一番研究,我终于找到了解决方案......所以我做到了:

total_score(Hero, Score):-
    findall(Points, (defeated(Hero, Monster), score(Monster, Points)), ListOfPoints),
    sum_list(ListOfPoints, Score).

关于prolog - 如何对不同事实中的数字进行求和?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35880837/

相关文章:

algorithm - 生成列表 [1, 1, 2, 2, ..., n, n] 的所有排列,其中每对之间的元素数在 Prolog 中为偶数

Prolog - 尝试解决文本难题

multithreading - swi-prolog 中的多线程有一点改进

list - 如何编写一个以List1和List2为输入的序言程序,结果列表是List1和List2的交替元素?

prolog - 如何在所有参数模式的后继算术中实现阶乘序列?

prolog - 从 Prolog 中的列表构建复合谓词

prolog - 程序和数据在Prolog中是否相同?

prolog - 在序言中读取城市距离的 csv 文件?

artificial-intelligence - 如何着手创建一个 prolog 程序,该程序可以向后工作以确定达到目标所需的步骤

prolog - 语法错误: Operator expected