首页 > 解决方案 > Prolog 相等性检查在简单任务上失败

问题描述

我试图实现这一目标:

   sum(bookmark(num)),
   bookmark(bookmark(bum)),
   bookmark(bookmark(bookmark(num))).

   sum(bookmark(num), bookmark(bookmark(num)), A).

返回А = bookmark(bookmark(bookmark(num))) 我还没有关闭,因为我在书签功能上失败了,如下所述。

bookmark(e1, e2) :-
    e1 \= 0, 
    e2 \= 0. 

/*#e1 = element-one, e2 = element-two*/

sum(e1, e2, result) :- 
    bookmark(e1, e2),
    e1 is (1+1),
    e2 is (1+1),
    result = (e1 + e2).

我正在检查书签函数是否返回 true,然后进行简单的添加。问题是:如果书签函数的输入是任意两个数字,则返回 false。带有书签(1、2)的示例 - 错误。带有书签(0, 0)的示例 - 错误。任何为什么这不起作用的帮助将不胜感激。

标签: prolog

解决方案


在 Prolog 中,变量以大写字母开头。所以e1不是一个变量,而是一个常数,E1一个变量。

bookmark(E1, E2) :-
    E1 \= 0, 
    E2 \= 0.

sum(E1, E2, Result) :- 
    bookmark(E1, E2),
    E1 is (1+1),
    E2 is (1+1),
    Result = E1 + E2.

E1然而,上面的方法只有在和E2are both时才会成功2,然后Result2 + 2(not 4, just 2 + 2, or in canonical form +(2, 2))。


推荐阅读