下标如何工作?
How does subscript work?
在第一张图片中,我使用以下方法获取数组的第一个元素:
subscript(array,[1],First)
在第二张图片中,我尝试了相同的操作,但随后对第二个元素进行了尝试,但它获取了从第二个元素到数组末尾的所有内容。我只想要第二个元素而不是其余的。
下标究竟是如何工作的?
正如@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)
在第一张图片中,我使用以下方法获取数组的第一个元素:
subscript(array,[1],First)
在第二张图片中,我尝试了相同的操作,但随后对第二个元素进行了尝试,但它获取了从第二个元素到数组末尾的所有内容。我只想要第二个元素而不是其余的。
下标究竟是如何工作的?
正如@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)