Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.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
List prolog中的比较列表_List_Variables_Prolog - Fatal编程技术网

List prolog中的比较列表

List prolog中的比较列表,list,variables,prolog,List,Variables,Prolog,我刚开始学习prolog,我不明白为什么这个返回错误。我试图找到解决办法,但没有找到。有人能告诉我为什么这个报税表是假的吗 [[A],B,C]=[[a,b,c],[d,e,f],1]. 简短回答:[A]是一个单例列表,但相应的元素[A,b,c]有三个元素 您的目标是将[[A],B,C]与[[A,B,C],[d,e,f],1]匹配。因此,这意味着您希望将一个包含三个元素的列表与[[a,b,c],[d,e,f],1]匹配。此外,这意味着您希望匹配[A]=[A,b,c],b=[d,e,f]和c=1。

我刚开始学习prolog,我不明白为什么这个返回错误。我试图找到解决办法,但没有找到。有人能告诉我为什么这个报税表是假的吗

[[A],B,C]=[[a,b,c],[d,e,f],1].

简短回答
[A]
是一个单例列表,但相应的元素
[A,b,c]
有三个元素

您的目标是将
[[A],B,C]
[[A,B,C],[d,e,f],1]
匹配。因此,这意味着您希望将一个包含三个元素的列表与
[[a,b,c],[d,e,f],1]
匹配。此外,这意味着您希望匹配
[A]=[A,b,c]
b=[d,e,f]
c=1
。然而,
[A]
不能与
[A,b,c]
匹配,因为
[A]
意味着一个单件列表

您可能希望将其与
[A,B,C]
匹配:

?- [[A],B,C]=[[a,b,c],[d,e,f],1].
false.

?- [A,B,C]=[[a,b,c],[d,e,f],1].
A = [a, b, c],
B = [d, e, f],
C = 1.
?- [[A|_],B,C]=[[a,b,c],[d,e,f],1].
A = a,
B = [d, e, f],
C = 1.
如果要与非空列表匹配,第一个元素为
a
,则可以将其与
[a |!]
匹配:

?- [[A],B,C]=[[a,b,c],[d,e,f],1].
false.

?- [A,B,C]=[[a,b,c],[d,e,f],1].
A = [a, b, c],
B = [d, e, f],
C = 1.
?- [[A|_],B,C]=[[a,b,c],[d,e,f],1].
A = a,
B = [d, e, f],
C = 1.

下面是使用
库(diadem)
回答查询失败原因的另一种方法:

在这里,系统生成了大多数仍然失败的一般化

第一个泛化删除了所有不相关的部分,剩下的是
[A]
[\uu,124; 124;]

第二个泛化坚持认为两个列表的尾部完全不同(而不是坚持认为它们是第一个泛化中所述的
[]
[||]


第三个和第四个只是更一般的视图。

因为您在这里的目标是将三个元素的列表与一个列表匹配
[[a,b,c],[d,e,f],1]
。此外,第一个列表应该只包含一个元素(由于
[A]
),但它包含三个元素。好的,我现在明白了。非常感谢你!