用Prolog解决俄罗斯套娃问题时查询返回false的原因是什么
Prolog俄罗斯套娃查询返回false问题解答
核心原因
你遇到的返回false问题是原子拼写不匹配导致的:
- 知识库
directlyIn/2事实中定义的套娃名称是katarina - 你查询时输入的名称是
katerina,两个拼写仅差一个字母,属于完全不同的Prolog原子,无法匹配到已有事实。
Prolog对常量原子的匹配是严格字符一致的,拼写不同的原子会被判定为完全不同的对象,因此查询第一步就匹配失败,最终返回false。
解决方案
将查询中的名称修改为和知识库一致的拼写即可得到正确结果:
?- in(katarina, natasha). true.
匹配逻辑验证:修改后查询会先匹配到
directlyIn(katarina, olga),再递归匹配in(olga, natasha),命中directlyIn(olga, natasha)的事实,最终返回true。
内容的提问来源于stack exchange,提问作者The Coder
相关产品推荐
相关产品推荐

