Prolog两个单独返回true的parent查询用==比较为何返回false
问题原因说明
你遇到的问题核心是对Prolog的==运算符作用和查询逻辑的误解:
- Prolog中的
==是项相等比较运算符,仅用来判断左右两个语法项的结构、内容是否完全一致,和这两个项能不能作为查询目标匹配知识库事实没有关联。 - 你写的
parent(charles1,james1)和parent(elizabeth,james1)是两个参数不同的复合项,虽然都符合parent/2的谓词结构,但第一个参数分别是charles1和elizabeth,本身就是完全不同的语法项,所以用==比较必然返回false。
正确写法
Prolog的查询本质是目标匹配:你单独执行parent(charles1,james1).返回成功,并不是说这个表达式的“值”是true,而是这个目标能和知识库中的现有事实匹配。如果你要判断两个目标都能匹配成功,符合你预期的正确写法是用合取运算符,连接两个目标:
parent(charles1,james1), parent(elizabeth,james1).
这个查询会先匹配第一个目标,成功后再匹配第二个目标,两个都成功就会整体返回true。
内容的提问来源于stack exchange,提问作者daveoscarsdad
相关产品推荐
相关产品推荐

