Я новичок в прологе, я хочу получить функцию: drop (N, X, Y), которая печатает список Y, который является списком X с удаленным N-м элементом. Если X не имеет N-го элемента, то предикат должен потерпеть неудачу. Пример: 1) drop (2, [1,2,3,4,5,6], Y) должен дать Y = [1,3,4,5,6].
2) drop (8, [1,2,3,4,5,6], Y) должен завершиться неудачей.
Я попытался получить функцию, которая добавляет элемент X к Y, если это не N-й элемент, и пропускаетэлемент, если это N-й элемент. Пожалуйста, смотрите следующий код:
drop(N,X,Y) :- integer(N),N>0,drop(X,1,N,Y).
drop([], _ , _ , [] ) .
drop( [X1|X] , P , N , [X1|Y] ) :- N=\=P , P1 is P+1 , drop(X,P1,N,Y) .
drop( [_|X] , P , N ,Y) :- N =:= P , P1 is P+1 , drop(X,P1,N,Y) .
Проблема возникает, если N больше, чем длина списка, мой код напечатает весь список, но в этом случае должна произойти ошибка функции. Я не могу найти способ сравнить N с длиной списка, так как каждая функция в прологе возвращает двоичное значение (насколько мне известно). Любая помощь будет высоко ценится!