Как говорит @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)
person
jschimpf
schedule
20.05.2016
[1, 9, ...]
. Тот факт, что[2]
дает конец списка, подразумевает для меня, что структура похожа на член списка Пролога,'.'(H, T)
, который представлен синтаксисом[H|T]
в Прологе. Таким образом,[2]
(что дает второй аргумент термина) даетT
. Просто мысль... - person lurker   schedule 18.05.2016