我无法理解为什么这个谓词不能像我期望的那样工作。我认为列表的尾部将是一个只有一个项目的列表,这将是list的最后一个元素。所以当我最后运行查询时(X,[1 ,2,3])结果将是X = 3但我采取假。
最后(项目,[_ | [项目]])。
答案 0 :(得分:1)
你的last
做的是尝试将第二个参数统一到一个只有两个元素的列表中。什么是清单?
[]
[_|Rest]
此处,Rest
必须是列表。所以它可以是空列表,也可以是非空列表。以下是长度为1,2,3的正确列表:[1|[]]
,[1|[2|[]]]
,[1|[2|[3|[]]]]
。重要的是要理解:
?- [1] = [X|[]].
X = 1.
?- [1,2] = [X|[Y|[]]].
X = 1,
Y = 2.
?- [1|[2]] = [X|[Y|[]]].
X = 1,
Y = 2.
您可以查看this answer on Programmers Stackexchange,了解在Prolog中定义last/2
的不同方法。