Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
返回周期的Prolog分解_Prolog - Fatal编程技术网

返回周期的Prolog分解

返回周期的Prolog分解,prolog,Prolog,我有一个分解表达式的谓词,当我跟踪它时,我得到了我不理解的结果 我的谓词如下 calc(R,Expr) :- Expr =..[Op,H,T]. 所以当我有一个像[1,1]这样的表达式时,Op实际上是一个周期。知道为什么吗?这是因为[Head | Tail]形式只是“.”Head,Tail的语法糖。所有东西都是一个术语,列表也不例外。通常,对于由1、2、3和4组成的列表,您必须编写 '.'(1, '.'(2, '.'(3, '.'(4, [])))). 如您所见,这并不实用,我们使用的是快

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

我的谓词如下

 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, 3, 4]
您可以根据自己的意愿进行混合:

[1, 2|[3, 4]]
当您希望指定某些元素,然后释放尾部时,这非常方便:

[1, 2|A]
顺便说一句,您可以通过使用write_canonical/1自己看到这一点:

希望它能有所帮助,因为[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, 3, 4]
您可以根据自己的意愿进行混合:

[1, 2|[3, 4]]
当您希望指定某些元素,然后释放尾部时,这非常方便:

[1, 2|A]
顺便说一句,您可以通过使用write_canonical/1自己看到这一点:

希望它能帮助你

A你可能会感兴趣。A你可能会感兴趣。