В ответ вы получите X = [_G2397797, 2, 3, 4, 5] .
, _G2397797 не является строкой, это переменная, которая не создается экземпляр. Это связано с пунктом:
delete(X,[X|R],[_|R]).
, который помещает в выходной список анонимную переменную «_». Вы можете написать delete(X,[X|R],R).
Но у этого есть несколько проблем. Во-первых, он удаляет только , а не X, потому что в приведенном выше пункте, когда вы найдете его, вы преуспеваете. Также вы не подумали о пустом списке, который также является базовым случаем рекурсии. Наконец, в вашем втором пункте вы не применили какое-либо правило, которое говорит F и X отличаются и это положение дают неправильные результаты, когда F равен X.
Таким образом, вы могли бы написать:
delete(_,[],[]).
delete(X,[X|R],S):-delete(X,R,S).
delete(X,[F|R],[F|S]):-dif(X,F),delete(R,S).
'delete (X, [X | R], [_ | R]).' Не просто удаляет 'X', но заменяет его анонимной переменной (' _'). Это то, что вы действительно хотите? – lurker