1

我有一个分解表达式的谓词,当我跟踪它时,我得到了我不理解的结果。

我的谓词如下

 calc(R,Expr) :- Expr =..[Op,H,T].

所以当我有一个像 [1,1] 这样的表达式时,Op 实际上是一个句点。知道为什么吗?

4

1 回答 1

4

这是因为表单[Head|Tail]只是语法糖'.'(Head, Tail)(一切都是术语,列表也不例外)。通常,对于由 、 和 组成的列表1,您2必须编写34

'.'(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.

希望它有所帮助

于 2012-09-20T05:34:42.227 回答