下标是如何工作的?

时间:2016-05-18 10:15:57

标签: prolog eclipse-clp

在第一张图片中,我使用以下方法获取数组的第一个元素:

subscript(array,[1],First)

returns_one

在第二张图片中,我尝试相同但后来为第二个元素,但它获得了从第二个元素到数组末尾的所有内容。我只想要第二个元素而不是其余元素。

returns_rest

下标是如何正常工作的?

1 个答案:

答案 0 :(得分:3)

正如@lurker在评论中所说,您正在尝试将subscript/3应用于列表,但它需要一个数组或任何其他平面结构。

按照惯例,ECLiPSe使用带有仿函数'[]'/N的结构来表示数组。您可以通过字面编写

来创建它们
Array = [](5,Y,Z,9,2)

或使用dim/2

创建它们
dim(Array, [5])

或通过从列表中转换它们

array_list(Array, [5,Y,Z,9,2])

在这样的数组上,subscript/3按预期工作:

?- Array = [](5,X,Z,9,2), subscript(Array,[4],Elem).
Elem = 9
Yes (0.00s cpu)

请注意,在算术表达式中使用数组表示法时会隐式调用subscript/3

?- Array = [](5,X,Z,9,2), Result is Array[4] + 1.
Result = 10
Yes (0.00s cpu)