Содержание
- 2. Определение Список — упорядоченное множество объектов одинакового типа. Формально это определение соответствует определению массива в традиционных
- 3. Примеры записи списков [monday, tuesday, wednesday, thursday, friday, saturday, sunday] — список, элементами которого являются английские
- 4. Примеры записи списков Элементы списка могут быть любыми, в том числе и составными объектами. В частности,
- 5. Описание списков в программе В разделе описания доменов списки описываются следующим образом: DOMAINS = * Звездочка
- 6. Примеры описания списков domains listI = integer* /* список целых чисел */ listR = real* /*список
- 7. В классическом Прологе элементы списка могут принадлежать разным доменам, например: [monday, 1, "понедельник"]. В Турбо Прологе,
- 8. Пример записи списка с объектами разной природы DOMAINS element = i(integer); c(char); s(string) listE = element*
- 9. Рекурсивное определение списка Список — это структура данных, определяемая следующим образом: пустой список [ ] является
- 10. Рекурсивное определение списка H - голова списка, T — хвост списка. По-английски голова — Head, а
- 11. Рекурсивное определение позволяет организовывать рекурсивную обработку списков, разделяя непустой список на голову и хвост. Хвост, в
- 12. Примеры записей списков [1, 2, 3] = [1|[2, 3]], т.е. в списке [1, 2, 3] элемент
- 13. Примеры записей списков В списке [1, 2, 3] можно выделить два первых элемента и хвост из
- 14. Чтобы организовать обработку списка, в соответствии с рекурсивным определением, достаточно задать предложение (правило или факт, определяющее,
- 15. Обработка списков
- 16. Пример 1. Вычислить длину списка (количество элементов в списке). Идея решения: 1) в пустом списке элементов
- 17. Пример 2. Проверить принадлежность элемента списку. Идея решения: 1) предикат будет иметь два аргумента: первый —
- 18. Описанный предикат можно использовать: 1) для проверки, имеется ли в списке конкретное значение. Например, принадлежит ли
- 19. 2) получение по списку его элементов. Для этого нужно в качестве первого аргумента предиката указать свободную
- 20. 3) получить по элементу варианты списков, которые могут его содержать. Теперь свободную переменную запишем вторым аргументом
- 21. Пример 3. Объединить два списка. Идея решения: 1) Первые два аргумента предиката будут представлять соединяемые списки,
- 22. Решение: conc([ ], L, L). /* при соединении пустого списка с L получим список L */
- 23. Варианты решения задач для соединения списков. Например, Goal: conc([1, 2, 3], [4, 5], X) то получим
- 24. Варианты решения задач 2) получится ли при объединении двух списков третий. Например, Goal: conc([1, 2, 3],
- 25. Варианты решения задач 3) для разбиения списка на подсписки. Например, Goal: conc([1, 2], Y, [1, 2,
- 26. Варианты решения задач 4) для поиска элементов, находящихся левее и правее заданного элемента. Например, какие элементы
- 27. Варианты решения задач 5) на основе предиката conc создать предикат, находящий последний элемент списка: last(L,X):– conc(_,[X],L).
- 28. Варианты решения задач 6) проверить принадлежность элемента списку, используя предикат conc. Идея решения: если элемент принадлежит
- 29. Варианты решения задач 7) по двум значениям и списку проверить, являются ли эти значения соседними элементами
- 30. Идея решения : если два элемента оказались соседними в списке, значит, этот список можно разложить на
- 31. Пример 4. Удалить все вхождения заданного значения из списка Идея решения: Предикат будет зависеть от трех
- 32. Пример 4. Удалить все вхождения заданного значения из списка Идея решения: Базис рекурсии - если первый
- 34. Скачать презентацию