
- •27. Управление программой. Внутренние подпрограммы унификации Пролога.
- •28. Структура программ на Прологе. Предикаты и утверждения.
- •29. Арифметика в Прологе.
- •30. Программирование повторяющихся операций. Повторение и откат.
- •31. Методы повторения. Методы организации рекурсии.
- •32. Списки в Прологе. Применение списков в программе.
- •34. Использование метода с разделением списка на голову и хвост. Компоновка данных в список.
- •34. Присваивание переменным строковых значений. Конкатенация строк. Преобразование данных.
- •35 Создание символьных префиксов. Преобразование строк в список символов.
- •38. Преобразование строк в списки атомов с функторами.
- •39.Предикаты Пролога для работы с файлами. Использование предикатов для работы с файлами.
- •40. Программы для обработки файлов.
- •41. Дозапись данных в файл
- •42. Использование файлов прямого доступа
- •43. Использование предикатов для работы с окнами. Использование окон для ввода вывода.
- •44. Использование графики в программе. Использование графики черепашки.
- •45.Использование звук и музыки.
- •46.Базы данных в Прологе. Предикаты динамической базы данных в Прологе.
- •47. Создание базы данных, располагающейся в оперативной памяти.
- •48. Создание базы данных, располагающейся на диске
- •49. Принципы построения экспертных систем
- •50.Методы вывода и система пользовательского интерфейса эс.
- •51.Экспертные системы, базирующиеся на правилах.
- •52.Экспертные системы, базирующиеся на логике.
32. Списки в Прологе. Применение списков в программе.
Список - это упорядоченный набор объектов, следующих друг за другом. Составляющие списка внутренне связаны между собой, поэтому с ними можно работать и как с группой (списком в целом), так и как с индивидуальными объектами (элементами списка).
Турбо-Пролог позволяет выполнять со списком целый ряд
операций. Их перечень включает:
доступ к объектам списка
проверка на принадлежность к списку
разделение списка на два
слияние двух списков
сортировку элементов списка в порядке возрастания или убывания
Списки бывают полезны при создании баз знаний (баз данных), экспертных систем, словарей; перечень областей применения можно продолжать еще долго.
Список является набором объектов одного и того же доменного типа. Объектами списка могут быть целые числа, действительные числа, символы, символьные строки и структуры.
Порядок расположения элементов является отличительной чертой списка; те же самые элементы, упорядоченные иным способом, представляют уже совсем другой список. Порядок играет важную
роль в процессе сопоставления. Турбо-Пролог допускает списки, элементами которых являются структуры. Если структуры принадлежат к альтернативному домену, элементы списка могут иметь разный тип.
Совокупность элементов списка заключается в квадратные скобки ([]), а друг от друга элементы отделяются запятыми.
Список может содержать произвольное число элементов, единственным ограничением является лишь объем оперативной памяти. Список может содержать всего один элемент и даже не содержать элементов вовсе:
["summer"]
[]
Список, не содержащий элементов, называется пустым или нулевым списком. Непустой список можно рассматривать как состоящий из двух частей: первый элемент списка - его голова, и остальная часть списка - хвост. Голова является элементом списка, хвост есть список сам по себе. Голова - это отдельное неделимое значение. Если список состоит из одного элемента, то его можно разделить на голову, которой будет этот самый единственный элемент, и хвост, являющийся пустым списком.
Применение списков в программе
Для того чтобы использовать в программе список, необходимо описать предикат списка.
num([1,2,3,6,9,3,4])
realnum([3.2,4.6,1.1,2.64,100.2])
time(["YESTERDAY","TODAY","TOMORROW"])
В этих выражениях num, realnum и time все представляют предикаты списков.
Введение списков в программу с необходимостью отражается на трех ее разделах. Домен списка должен быть описан в разделе domains, а работающий со списком предикат - в разделе predicates. Нужно ввести сам список; то есть, другими словами, его нужно задать где-то в программе: либо в
разделе clauses, либо в разделе goal.
Отличительной особенностью описания списка является наличие звездочки (*) после имени домена элементов.
Описание в разделе domains, следовательно, может выглядеть либо как
bird_list = bird_name *
bird_name = symbol
либо как
bird_list = symbol *
В разделе описания предикатов predicates требуется присутствия имени предиката, а за ним заключенного в круглые скобки имени домена.
birds(bird_list)
Сам список присутствует в разделе утверждений clauses:
birds(["sparrow","robin","mockingbird","thunderbird","bald eagle"]).