prolog - 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 中,变量以大写字母开头。所以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
然而,上面的方法只有在和E2
are both时才会成功2
,然后Result
是2 + 2
(not 4
, just 2 + 2
, or in canonical form +(2, 2)
)。
推荐阅读
- flutter - 在后台使用 googleapis 将文件上传到 google 驱动器 (Flutter)
- javascript - 可编辑表单 ActiveRecord::RecordNotFound(找不到带有 'id'=undefined 的视频)
- python - 如何重塑数据集使其只有一列?
- mongodb - MongoDB聚合:过滤器中的日期比较不起作用
- r - 使用 mlogit R 函数时出错:两个索引未定义唯一观察值
- python - 如何将 groupby 结果分配给 pandas 中的系列
- php - Symfony 5 部署问题(显示空白页面)
- elasticsearch - 在 Elasticsearch 中创建直方图
- php - 带有 Workerman 的 PHP websockets - nginx 配置
- java - Google App Engine 如何缩小规模?我应该为此做些什么准备?