List prolog中的比较列表
我刚开始学习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。
[[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]
),但它包含三个元素。好的,我现在明白了。非常感谢你!