You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在Prolog中查询事实的总和?新手技术求助

解决Prolog中计算两种食物总卡路里的问题

嘿,作为Prolog新手碰到这种逻辑和算术结合的问题真的很常见!我来一步步帮你搞定~

首先得明白:Prolog的查询逻辑和咱们平时写数学表达式不一样,它是先匹配事实获取值,再进行算术计算,不能直接把谓词当成数值来加。你之前的写法报错,就是因为没遵循这个逻辑。

直接查询的正确写法

你需要先分别获取两种食物的卡路里值,用不同变量存储,再用is/2谓词计算总和(is是Prolog里用来计算算术表达式并把结果绑定到变量的关键):

calories(pizzaSlice, X), calories(porkFillet, Y), Z is X + Y.

执行这个查询时,Prolog会:

  1. 先匹配calories(pizzaSlice, X),得到X = 250
  2. 接着匹配calories(porkFillet, Y),得到Y = 400
  3. 最后用Z is X + Y计算总和,得到Z = 650

运行后你就能看到结果Z = 650啦。

封装成可复用的谓词(进阶)

如果以后经常需要计算两种食物的总卡路里,可以把这个逻辑封装成一个自定义谓词,比如total_calories/3

total_calories(Food1, Food2, Total) :-
    calories(Food1, C1),   % 获取第一种食物的卡路里
    calories(Food2, C2),   % 获取第二种食物的卡路里
    Total is C1 + C2.      % 计算总和

之后查询就更简洁了:

total_calories(pizzaSlice, porkFillet, T).

同样会得到T = 650的结果。

为什么你之前的写法不对?

  • 你尝试的(calories(pizzaSlice, X) + calories(porkFillet, X))calories是谓词,不是数值,不能直接用+运算;而且同一个变量X不能同时绑定250和400,会产生冲突。
  • 哪怕用了不同变量XY,没加is的话,Prolog只会把X + Y当成一个未求值的表达式,不会计算出具体数值。

内容的提问来源于stack exchange,提问作者Saul Martinez

火山引擎 最新活动