我有一个分解表达式的谓词,当我跟踪它时,我得到了我不理解的结果。
我的谓词如下
calc(R,Expr) :- Expr =..[Op,H,T].
所以当我有一个像 [1,1] 这样的表达式时,Op 实际上是一个句点。知道为什么吗?
我有一个分解表达式的谓词,当我跟踪它时,我得到了我不理解的结果。
我的谓词如下
calc(R,Expr) :- Expr =..[Op,H,T].
所以当我有一个像 [1,1] 这样的表达式时,Op 实际上是一个句点。知道为什么吗?
这是因为表单[Head|Tail]
只是语法糖'.'(Head, Tail)
(一切都是术语,列表也不例外)。通常,对于由 、 和 组成的列表1
,您2
必须编写3
4
'.'(1, '.'(2, '.'(3, '.'(4, [])))).
如您所见,这不是很实用,而是我们使用快捷方式:
[1|[2|[3|[4|[]]]]]
而这个快捷方式有一个快捷方式:
[1, 2, 3, 4]
您可以根据需要混合它们:
[1, 2|[3, 4]]
当您想指定一些元素然后让尾部自由时,这很方便:
[1, 2|A]
顺便说一句,您可以使用以下方法自己查看write_canonical/1
:
?- write_canonical([1, 2, 3, 4]).
'.'(1,'.'(2,'.'(3,'.'(4,[]))))
true.
希望它有所帮助