Кто-нибудь знает, как я могу определить/убедиться, что в списке проломов есть ровно один повторяющийся элемент?Ровно одна пара в списке Пролога
Я изучаю для теста.
Кто-нибудь знает, как я могу определить/убедиться, что в списке проломов есть ровно один повторяющийся элемент?Ровно одна пара в списке Пролога
Я изучаю для теста.
Отсортировать список, используя sort/2
. Он удаляет дубликаты, поэтому, если отсортированный список ровно один, он имеет ровно одну пару.
one_duplicate(L) :-
sort(L, Sorted),
length(L, Len),
length(Sorted, SortedLen),
Len =:= SortedLen + 1.
Обнаружение дублирующей пары - это еще один вопрос.
Ницца! У меня есть желание поместить sort/2 в последний раз, даже если это не улучшит программу. – false
@false Я думал об этом. Я написал код после того, как написал свободный текст, поэтому отсюда и порядок. Это также потребовало бы использовать 'is' или' succ' для длины _SortedLen_, и это немного странно. –
Самым большим недостатком размещения сортировки/2 в прошлом было бы то, что для частичного списка больше нет чистой ошибки создания. Подумайте о 'one_duplicate (L)' или 'one_duplicate ([a | L])'. – false
Я написал метод под названием count (X, Y, Z), который связывает Z с числом раз, когда X встречается в списке Y. Я пытаюсь отработать это, но я не уверен, в каком направлении идти – user1895814