采取列表并给我这个列表的最后一项的谓词不能像我期望的那样工作

时间:2015-03-28 16:50:39

标签: prolog

我无法理解为什么这个谓词不能像我期望的那样工作。我认为列表的尾部将是一个只有一个项目的列表,这将是list的最后一个元素。所以当我最后运行查询时(X,[1 ,2,3])结果将是X = 3但我采取假。

最后(项目,[_ | [项目]])。

1 个答案:

答案 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的不同方法。