如何查询序言中的事实总和?

How to query to sum facts in prolog?

我是 prolog 的新手,不知道如何查询以下内容,创建一个我正在尝试做的小例子:

有一组事实:

calories(pizzaSlice, 250).
calories(porkFillet, 400).

我需要知道“pizzaSlice 和 porkFillet 总共有多少卡路里?”

我觉得应该有一个直接的方法来做到这一点,但我想不通。

如果我问:

calories(pizzaSlice, X).
// X = 250 .

但我尝试了以下方法。所有这些都会导致错误:

(calories(pizzaSlice, X) + calories(porkFillet, X)).
(calories(pizzaSlice, X) + calories(porkFillet, Y)).
(calories(pizzaSlice, _) + calories(porkFillet, _)).

我该怎么做?

谢谢。

请记住,Prolog 是一种基于一阶逻辑的声明性编程语言。您不能在 Prolog 中编写 return 值的函数(例如在 Python 中),您总是定义逻辑谓词。

您的示例的查询是:

?- calories(pizzaSlice, CalPS), 
   calories(porkFillet, CalPF), 
   Sum is CalPS + CalPF.

变量Sum将通过pizzaSlice(即CalPS)和porkFillet(即CalPF)的卡路里总和实例化.