Как вызвать список из списка в прологе

Как вызвать список списка в Прологе для примера У меня есть этот список:

list([[1,2,3],[4,5],[6,7]]).

Я хочу вызвать мой список в функции element_at:

element_at(X,[X|_],1).
element_at(X,[_|L],K) :-
   element_at(X,L,K1),
   K is K1 + 1.

Когда я звоню

element_at(X,list,2)

У меня нет результата.

2 ответа

Решение

Мы получаем значение из нашей базы знаний путем обращения к предикату,

list(L)

поэтому весь запрос в командной строке

list(L), element_at(X, L, 2).

Или определите это в исходном файле,

my_query(X) :- list(L), element_at(X, L, 2).

У меня нет результата.

Ну, у вас есть результат: неудача. Но вы ожидали успеха. Вот очень общий метод, как вы можете найти такие ошибки в Прологе самостоятельно:

Если вы столкнулись с неожиданной ошибкой, просто обобщите вашу программу.

В вашем конкретном случае, element_at(X,list,2) выходит из строя. Может быть, это должно быть 3 на месте 2? Или, может быть, другой номер? В Прологе есть простой способ угадать: просто замените 3 переменной! Таким же образом вы можете удалить цели в своем определении. я использую * чтобы пометить тех.

Вот обобщение вашей программы, которая все еще не работает - и, следовательно, в оставшейся части должна быть ошибка:

: - op (950, фу, *).
*(_).?- element_at(X, список, _ / * 2 * /).

element_at (X, [_ / * X * / | _], _ / * 1 * /).
element_at (X, [_ | L], K): -
   * element_at (X, L, K1),
   * K - это K1 + 1.
Другие вопросы по тегам