Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка по языку ЛИСП.doc
Скачиваний:
105
Добавлен:
28.06.2014
Размер:
210.94 Кб
Скачать

МИНИСТЕРСТВО НАУКИ, ВЫСШЕЙ ШКОЛЫ И ТЕХНИЧЕСКОЙ

ПОЛИТИКИ РОССИЙСКОЙ ФЕДЕРАЦИИ

─────────────

МОСКОВСКИЙ ЭНЕРГЕТИЧЕСКИЙ ИНСТИТУТ

───────────────────────────────────────────────────────

ЛАБОРАТОРНЫЙ ПРАКТИКУМ

по курсу

Программирование и алгоритмические языки

ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ ЛИСП В СИСТЕМЕ muLISP-90

───────────────────────────────────────────────────────

Москва 1993

МИНИСТЕРСТВО НАУКИ, ВЫСШЕЙ ШКОЛЫ И ТЕХНИЧЕСКОЙ

ПОЛИТИКИ РОССИЙСКОЙ ФЕДЕРАЦИИ

─────────────

МОСКОВСКИЙ ЭНЕРГЕТИЧЕСКИЙ ИНСТИТУТ

───────────────────────────────────────────────────────

Утверждено

учебным управлением МЭИ

ЛАБОРАТОРНЫЙ ПРАКТИКУМ

по курсу

Программирование и алгоритмические языки

ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ ЛИСП В СИСТЕМЕ muLISP-90

───────────────────────────────────────────────────────

Москва 1993

.

 _Программирование на языке ЛИСП в системе muLISP-90 .. Бай-

дун В.В., Кружилов С.И., Сергиевский А.Е, Чернов П.Л. - М.:

Моск. энеpг. ин-т, 1993. ─ 40 с.

Лабораторный практикум содержит описание основных принци-

пов программирования и работы в системе muLISP-90., а так же

список базовых функций, используемых в этой системе. Приведены

рекомендации по отладке программ.

Лабораторный практикум предназначен для слушателей ФПКП и

студентов специальности "Прикладная математика", выполняющих

практические задания и типовой расчет на языке ЛИСП с примене-

нием персональных ЭВМ.

─────────────────────

С Московский энергетический институт, 1993 г.

- 3 -

ВВЕДЕНИЕ

Использование языка ЛИСП для исследования и разработки прог-

раммного обеспечения в области решения задач искусственного интел-

лекта определяется комплексом его отличительных черт:

- Теоретическая стройность и строгость языка, простая семан-

тика обеспечивают ясность понимания принципов его работы;

- Аппликативность ЛИСПа обеспечивает естественность функцио-

нального подхода при разработке в его среде сложных программных

систем с использованием методик как "сверху-вниз",так и "сни-

зу-вверх";

- Рекурсивность языка позволяет в ряде случаев существенно

упростить реализацию алгоритмов решения задач;

- Универсальность структурирования данных в ЛИСПе, возмож-

ность строить структуры данных в динамике, наряду с автоматическим

распределением памяти, делает его незаменимым инструментом решения

задач со сложной структурой данных;

- Расширяемость языка позволяет пользователю добавлять собс-

твенные функции и структуры данных;

- Интерактивность реализации ЛИСП-систем, удобство и быстрота

отладки программ делают ЛИСП мощным инструментом для программиро-

вания и программного моделирования большого класса задач.

В данном пособии приводятся основные сведения для работы в

системе muLISP, одной из наиболее известных ЛИСП-систем для персо-

нальных ЭВМ. К основным достоинствам этой системы можно отнести

структурность реализованной версии языка, большой набор базовых

функций, компактность реализации системы наряду с высокой эффек-

тивностью интерпретации программ. Приведенные далее сведения соот-

ветствуют версии системы muLISP-90.

1. Основные принципы работы в системе muLisp

Если система muLISP установлена на вашей ПЭВМ, то для ее вы-

зова в среде операционной системы MS-DOS нужно ввести команду

MULISP. Вслед за эти на экране появляется сообщение идентифицирую-

щее версию системы muLISP. Знак "$" в начале следующей строки и

- 4 -

мигающий курсор за ним показывают, что система готова к вводу и

интерпретации команд.

В качестве команды можно ввести либо имя атома, либо точечное

выражение, либо список со сбалансированным набором скобок. Завер-

шение ввода определяется нажатием клавиши Enter. muLISP считывает

введенное выражение, вычисляет его и печатает на экране полученный

результат. После чего в новой строке опять появляется символ "$" -

приглашение к вводу новой команды. Обратим внимание, что если

скобки в команде не сбалансированы, то система либо выдаст сообще-

ние об ошибке (закрывающих скобок больше открывающих), либо будет

ждать ввода нужного числа закрывающих скобок, если их не хватает,

даже после нажатия клавиши Enter. Так продолжается до тех пор, по-

ка не будет введена команда (SYSTEM) после выполнения которой уп-

равление возвращается операционной системе.

Команда вычисляется следующим образом. Если введен список

первым элементом которого является имя функции, как стандартной,

так и определенной программистом с помощью оператора DEFUN, то ос-

тальные элементы списка будут считаться фактическими параметрами

этой функции. После чего функция вычисляется для заданных значений

параметров. Во всех остальных случаях (атом,точечная пара, список-

данное) вычисляется значение введенного выражения.

Ниже приведен пример сеанса работы в системе muLISP:

>MULISP ; вызов системы muLISP из MS-DOS

muLISP IBM/PC MS-DOS version 7.20 (10/15/92)

Copyright 1983,1987,1990 Soft Warenhouse, Inc.

$(DEFUN PROC (X Y) (* (/ Y 100) X) ;определение функции X% от Y

PROC ;вывод значения функции DEFUN

$(PROC 5 100) ;обращение к функции PROC

20 ;вывод значения функции PROC

$(SETQ A 7) ;выполнение функции А:=7

7 ;вывод значения функции А:=7

$A ;команда-атом

7 ;вывод значения атома

$(A B C) ;команда-список данных

(A B C) ;вывод значения списка

- 5 -

$(CDR '(A B C) ) ;иллюстрация записи

(B C) ;оператора QUOTE

$(CAR A) ) ;ввод ошибочной команды

;(лишняя закрывающая скобка)

Syntax error: ;сообщение об ошибке

Continue,Break,Abort,Top-level,Restart,System? Т

$(SYSTEM) ;команда выхода из ЛИСПА в MS-DOS

>

Из приведенного примера понятен способ комментирования прог-

рамм в системе muLISP: комментарием считается текст следующий

после символа ";" до конца строки.

В обычных условиях при вводе команд строчные буквы автомати-

чески преобразуются в заглавные. Для того, чтобы избежать такого

преобразования нужно присвоить специальной управляющей переменной

*READ-UPCASE* значение NIL. Это можно сделать например командой

(SETQ *READ-UPCASE* NIL). Любое другое значение присвоенное этой

переменной опять повлечет за собой преобразование символов.

В процессе ввода команды обеспечивается стандартная для систе-

мы MS-DOS возможность редактирования текста вводимых команд. Крат-

кий список комбинаций клавиш управления редакторскими функциями

приведен ниже:

-> - сдвиг курсора на 1 символ вправо;

<- - сдвиг курсора на 1 символ влево;

Ctrl + -> - сдвиг курсора вправо на слово;

Ctrl + <- - сдвиг курсора влево на слово;

End - сдвиг курсора в конец строки;

Home - сдвиг курсора в начало строки;

Del - удалить символ в позиции курсора;

Baskspace - удалить символ слева от курсора;

Ctrl + T - удалить слово под курсором;

Ctrl + Y - удалить текущую строку;

Ctrl + Q + Y - удалить часть строки справа от курсора;

Ctrl + Q + H - удалить часть строки слева от курсора;

F3 - вставить удаленную или предыдущую команду;

Ins - переключение редактора из режима вставки в

- 6 -

режим замещения и обратно;

Enter - выход из редактора и ввод текста;

Esc - выход из редактора без ввода текста.

Символом + здесь обозначается сочетание клавиш используемых

для редактирования.

Этих средств достаточно для ввода отдельных команд. Набор

текстов программ и структур данных лучше осуществлять с помощью

более мощного редактора ( см. раздел "Редактирование текста прог-

раммы" ).

2. ОСОБЕННОСТИ ПРОГРАММИРОВАНИЯ В СИСТЕМЕ muLISP

Особенности программирования в системе muLISP определяются на-

бором средств расширения стандартного языка ЛИСП:

- Для записи оператора QUOTE допускается следующее сокращение:

(QUOTE S) может записываться как 'S (см. в приведенном выше приме-

ре);

- Автоквотирование атомов. При создании нового символьного

атома, система устанавливает значение этого атома равным его име-

ни. Так атом SLON, появившийся в системе, будет иметь значение

SLON до тех пор пока не произойдет присваивания нового значения.

Это позволяет в ряде случаев не пользоваться оператором QUOTE.

Например, можно вместо выражения (SETQ X 'SLON) писать просто

(SETQ X SLON);

- При построении тела функций подразумевается неявное исполь-

зование оператора PROGN, т.е. тело функции может представлять со-

бой последовательность операторов:

(DEFUN F (X Y) (S1 ...)(S2 ...)...(Sn ...) ).

Результирующим значением функции F будет значение последнего

из них Sn. В соответствии с этим принципом расширено использование

многих функций ЛИСПа, и ,в частности, оператора COND, где вместо

одного действия, выполняемого после определения истинного условия,

допускается последовательность действий, выполняемых по принципу

неявного оператора PROGN:

(COND (P1 S11 S12...)...(Pn (SN1 SN2...) ).

- 7 -

- Для упрощения структуры программы в систему введен неявный

оператор COND, имеющий вид ( (P...) S1 S2 ... SN ). Этот оператор

является аналогом оператора IF P THEN (S1...SN).

- В системе отсутствует оператор GO.

- Для записи итерационных алгоритмов введен структурный опера-

тор цикла LOOP, имеющий вид (LOOP S1 S2 ... SN) и позволяющий бес-

конечно повторять последовательность операторов (S1 S2 ... SN).

Выход из цикла может быть осуществлен с помощью одного или нес-

кольких неявных операторов COND. Например итерационное определение

функции ФАКТОРИАЛ с использованием оператора цикла может иметь

следующий вид:

(DEFUN FACTORIAL (N M)

(SETQ M 1) ;М:=1

(LOOP ;оператор цикла

( (ZEROP N) M) ;неявный COND для выхода из цикла

(SETQ M (* M N)) ;M:=M*N

(SETQ N (SUB1 N)) ;N:=N-1

)

).

- В muLISPе избыточные аргументы в списке формальных парамет-

ров функции могут быть использованы в качестве локальных перемен-

ных внутри функции. При входе в функцию всем избыточным аргументам

присваивается значение NIL. Примером может служить переменная М в

приведенном выше определении факториала. Это позволяет, наряду с

неявным использованием аппарата PROGN, отказаться от использования

в программах операторов PROG, что упрощает структуру программы.

- muLISP обеспечивает применимость операторов CAR и CDR к ар-

гументам любых типов, а не только к спискам. Так (CAR A) выдает

значение атома А, а (CDR A) - список его свойств. Аналогичные сог-

лашения имеются и для числовых атомов. Потому при работе необходи-

мо соблюдать определенную осторожность.

- В языке расширена трактовка многих операторов ЛИСПа таких

как +, -, *, SETQ и т.д. Они определены не только для двух аргу-

ментов, а допускают гораздо большее их количество. Поэтому, глядя

на описания функций приведенных в следующих разделах, обращайте,

пожалуйста, на это внимание! К тому же, интерактивность при работе

- 8 -

с системой дает возможность посмотреть, как выполняется любая ко-

манда. Пользуйтесь этой возможностью, чтобы проверить правильность

понимания вами принципов работы функций системы!