Когда я сортирую [(101, a), (42, b), (85, b)], это Prolog с sort([(101,a),(42,b),(85,b)],X).
is get X = [ (42, b), (85, b), (101, a)].
Но как получилось? Пролог распознает кортежи и сортирует их по первому элементу, а затем по второму элементу?Сортировка кортежей в Prolog
ответ
Вы должны просто просто посмотреть точную документацию по использованию Пролога. Например, в SWI-Prolog сортировка выполняется в «стандартном порядке». Для составных терминов (как вы используете), это первая arity, затем имя, а затем рекурсивные аргументы. Итак, в вашем случае, да, сначала он сортируется сначала, а затем по второму аргументу.
Кстати, ISO sort
должен удалять дубликаты, а не то, что вы его удивляете.
И, строго говоря, в Prolog нет «кортежей». У вас есть функтор ,
с arity 2 (или, ,/2
). Посмотрите на это:
2 ?- write_canonical((42, b)).
','(42,b)
true.
Ваше предположение кажется разумным. Мы можем проверить некоторые документы, лично мне нравится documentation for ciao.
См. Стр. 235, затем стр. 115. Обратите внимание, что вы также можете сортировать по клавишам.
Вы должны знать, что некоторые люди считают использование таких предикатов (не декларативных) плохими. В принципе, в этом предикате есть два члена, один должен быть заземлен, а другой не должен, так что на самом деле это функция, а не логический предикат. Те, кто обеспокоен «чистотой» логического программирования, вероятно, найдут способ обхода, чтобы не использовать это.
Спасибо! Как не логично говорить, что Y - отсортированный список X в сортировке (X, Y)? Я имею в виду, что для каждого предиката для сортировки потребуется список и вывод? Или я ошибаюсь в этом? – Confituur
Логический член (X, Y), так что ни один из обоих терминов не должен быть заземлен. Логический предикат устанавливает связь между группой переменных, нет ничего похожего на «ввод» или «вывод», и он не используется для «сортировки», он только устанавливает, что X и Y имеют точно такие же элементы и что элементы в Y сортируются (что является их отношением). По крайней мере, это от «чистого подхода к логическому программированию», по сути, это просто «программирование с обратным отслеживанием и переменными унификациями». – Trylks
Вы не можете избежать «возврата и унификации» даже во что-то столь же тривиальном, как и член: он объединит X с элементами Y в порядке, определенном конкретной реализацией члена. В этом смысле Prolog никогда не является чисто логичным, поэтому логическое программирование и Prolog обычно обсуждаются отдельно. –
- 1. сортировка кортежей в python
- 2. Сортировка списка в кортежей
- 3. Сортировка кортежей в F #
- 4. Сортировка кортежей кортежей в алфавитном порядке
- 5. Prolog Сортировка подход
- 6. Сортировка списка списков в Prolog
- 7. Сортировка кортежей по алфавиту
- 8. Сортировка кортежей средними
- 9. сортировка списка кортежей
- 10. Сортировка кортежей dicts
- 11. Сортировка кортежей Python
- 12. Сортировка списка кортежей (Python)
- 13. Сортировка списка вложенных кортежей
- 14. Сортировка списка кортежей в C#
- 15. Сортировка списка кортежей с двумя входами кортежей в обратном порядке
- 16. Сложность Сортировка кортежей с itemgetter
- 17. Сортировка списка кортежей с CustomComparer
- 18. Сортировка контейнера кортежей фиксированными компонентами
- 19. Сортировка списка кортежей происходит неправильно
- 20. Python 3 Сортировка списка кортежей?
- 21. сортировка кортежей в списках в питоне
- 22. Сортировка списка кортежей в последовательном порядке
- 23. сортировка кортежей в Python с ключом пользовательского
- 24. Сортировка кортежей по значению элемента в Python
- 25. Python сортировка 2D-массив кортежей в python
- 26. Сортировка кортежей внутри списка в Haskell
- 27. сортировка кортежей в списке, используя функцию лямбда
- 28. Слияние и сортировка кортежей в Python
- 29. Prolog Сортировка списка структуры, арифметическая ошибка
- 30. Python3 Сортировка Список кортежей с лямбда и сортировка
Функторы повсюду ... Черт бы тебя побрал, Хаскелл, я не могу перестать видеть это все вокруг меня сейчас ... Всегда ли это было, и я был слепым? Ahh Я получаю головную боль, думая об этом, я не могу не заметить ... –
@JimmyHoffa :) но в чем ваша суть, точно, Джимми? –
Что я был постоянно изменен против моей воли, Haskell должен прийти с более серьезными предупреждениями ... –