- •Модуль 1. Приемы программирования на пролоГе.
- •Тема 1. Основные понятия и определения логического программирования.
- •Лекция 1
- •1. Язык логического программирования пролог.
- •1.1 Основные понятия и определения
- •Лекция 2
- •1.2 Создание консольного приложения. Структура файла main.Pro.
- •1.3 Примеры построения правил
- •Лекция 3
- •1.5 Согласование целевых утверждений. Поиск с возвратом
- •1.5 Рекурсия в пролоГе.
- •Лекция 4
- •1.6 Средства управления пролог-программой. Отладка пролог-программ.
- •1.7 Стандартные предикаты обработки строк
- •1.8 Средства ввода и вывода. Работа с файлами.
- •Лекция 4
- •1.9 Изображение и обработка списков
- •Лекция 5
- •1.10 Динамические базы данных
- •2. Язык функционального программирования лисп Введение
- •2.1 Объекты данных Лиспа
- •2.2 Основные функции лисПа
- •2.2.1 Функции назначения
- •2.2.2 Числовые функции
- •2.2.3 Базовые функции лисПа
- •2.3 Основы работы в среде mulisp-85
- •2.4 Трассировка функций в muLisp.
- •2.4 Определение функций в лисПе
- •2.6 Рекурсивные определения и вычисления
- •Задания для лабораторных работ
2.3 Основы работы в среде mulisp-85
Начало работы. Для начала работы необходимо загрузить файл mulisp.com. После того, как появится знак доллара можно вводить любое выражение Лиспа. После закрытия последней скобки и нажатия клавиши ENTER, транслятор оценивает это выражение и, если оно составлено верно, вычисляет его и возвращает результат. После этого снова появляется знак доллара. В случае ошибки в выражении делается соответствующее сообщение об ошибке и предлагается следующий выбор действий:
CONTINUE, BREEK, ABORT, TOP-LEVEL, RESTART, SYSTEM
Потом система ожидает, пока пользователь выберет одну из этих опций путем указания на их имя (C, B, A, T, R или S соответственно). При этом опции перечислены в порядке усиления их действия:
C - возвращает значение прерывания и выполнение продолжается дальше;
B - временно приостанавливает выполнение программы и выводит на следующий нижний уровень цикла “чтение - вычисление - вывод”;
A - прерывает вычисление в процессе остановки;
T - возвращает управление верхнему уровню цикла “чтение - вычисление - вывод”;
S - закрывает все открытые файлы, завершает работу в muLISP и возвращает управление операционной системе.
Таким образом, робота интерпретатора происходит по циклическому принципу, который называется основным циклом. Такой циклический тип называется “овальным” Лиспом. Например,
$'DOG
DOG
$(+ 5 -2 4)
7
$(EQUAL 'DOG 'CAT)
NIL.
Для удобства имеется возможность возвратить последние три вызова выражения, последний – с помощью символа +, а второй и третий с конца – с помощью символов ++, +++ соответственно. Аналогично, символы *, **, *** возвращают соответствующие значения вызовов.
Работа с файлами. Данные поступают в среду muLISP через входной поток CIS (current input stream) или выводятся из программы через выходной поток COS (current output stream) В muLISPе существует один входной и один выходной поток. Поэтому для работы с разными файлами и устройствами эти потоки назначают на файл или устройство по необходимости. Для открытия файла и назначения входного потока на этот файл существует специальная функция RDS(read stream):
(RDS 'имя файла)
Данная функция является базовой функцией muLISP и работает в следующих режимах:
Если файл существует на диске и еще не был открыт, то RDS открывает этот файл и делает его активным, т.е. направляет на него входной поток. Иначе функция RDS возвращает NIL.
Если файл уже открыт, то функция RDS делает этот файл активным, и указатель устанавливается на начало файла, т.е. на 0. Сделать файл активным без замены указателя можно следующим вызовом
(SETQ RDS 'имя файла)
По умолчанию тип файла воспринимается как lsp. Если не указано устройство, то по умолчанию берется текущее устройство. После чего проводится считывание текста указанного файла с одновременным выполнением основного цикла, т.е. выполнением программы на языке LISP, которая записана в виде текста в заданном файле. Кроме этого чтение и выполнение можно провести при запуске системы muLISP, если указать имя файла в качестве параметра.
>muLISP [drive:name.type]
Функция RDS в конце файла без параметров закрывает файл с программой.
Для назначения исходящего потока существует функция WRS(write stream). Вызов (WRS) закрывает активный файл и назначает вывод на экран. Функция WRS применяется аналогично функции RDS. Файл может быть открытым как для чтения, так и записи одновременно. Для того, чтобы закрыть неактивный файл, необходимо сначала сделать его активным.
Файлы среды. Среда muLISP – это текущее состояние системы, которая состоит из всех определенных в данный момент структур и выражений. Текущее состояние может быть сохранено с помощью функции SAVE:
(SAVE 'E:FILE)
Указанное выражение создает файл текущего состояния на устройстве E с именем FILE.SYS. В случае успешного завершения возвращает символ T, в противном случае NIL. Сохраненное текущее состояние в виде SYS-файла может быть возобновлено (загружено) в любой другой момент времени с помощью функции LOAD:
(LOAD 'E:FILE),
которая по завершению также возвращает соответственно T или NIL. Текущее состояние может быть также загружено и при запуске системы muLISP:
>muLISP E:FILE
По умолчанию принимается тип файла .SYS.