Как вызвать список из списка в прологе
Как вызвать список списка в Прологе для примера У меня есть этот список:
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.