Как удалить указанное количество элементов в списке без библиотек Пролог - PullRequest
2 голосов
/ 11 апреля 2020

Как мне go удалить определенное количество элементов из списка? Мой текущий код даже не возвращает список. У меня есть:

removeSpecific(_, [], [], 0):-!. 

removeSpecific(Element, [Element|Tail], Tail1, NumToDelete):-
      NewNumDelete is NumToDelete-1,
      removeSpecific(Element, Tail, Tail1, NewNumDelete).

removeSpecific(Element, [_|Tail], [_|Tail1], NumToDelete):-
      removeSpecific(Element, Tail, Tail1, NumToDelete). 

При передаче что-то вроде: removeSpecifi c (4, [2,4,5,3,4,4], NewList, 2). Я получаю пустой список с количеством цифр (4), но не с действительной суммой.

Любая помощь будет оценена. Спасибо.

1 Ответ

1 голос
/ 11 апреля 2020

Причина, по которой это происходит, заключается в том, что все подчеркивания _ являются безымянными переменными. Использование их дважды в одном и том же предложении не приводит к объединению двух, это разные переменные. Таким образом, вы можете дать им имя:

removeSpecific(_, [], [], 0).
removeSpecific(Element, [Element|Tail], Tail1, NumToDelete):-
      NewNumDelete is NumToDelete-1,
      removeSpecific(Element, Tail, Tail1, NewNumDelete).
removeSpecific(Element, [<b>Head</b>|Tail], [<b>Head</b>|Tail1], NumToDelete):-
      removeSpecific(Element, Tail, Tail1, NumToDelete).

Для данного примера запроса это дает нам:

?- removeSpecific(4, [2,4,5,3,4,4], NewList, 2).
NewList = [2, 5, 3, 4] ;
NewList = [2, 5, 3, 4] ;
NewList = [2, 4, 5, 3] ;
false.

Первый результат удалит первые два 4 s, второй первый и последний 4 с, а последний ответ удаляет последние два 4 с.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...