Ббк 32. 973-018 г рецензент канд физ мат наук, Ф. А. Мурзин
Download 278.16 Kb.
|
FIT-Gor-PP3
Пример 15. Описание алгоритма на естественном языке Эту программу можно написать в виде Pascal-программы. Строкам описанной выше программы в предположении, что существует библиотека функций над списками на Pascal-е, соответствуют строки определения функции:
Пример 16. Представление программы на языке Pascal Переписывая это определение в виде лисповского S-выражения, получаем программу:
Пример 17. Представление программы на языке Lisp Последние две формы представляют применение функции. Их значения - четыре и пять, соответственно. Prog-форма имеет структуру, подобную определениям функций и процедур в Паскале: (PROG, список рабочих переменных, последовательность операторов и атомов ...). Атом в списке выполняет роль метки, локализующей оператор, расположенный вслед за ним. Метка A, как и в примерах 2 и 3, локализует оператор, начинающийся с ветвления. Первый список после символа PROG называется списком рабочих переменных. При отсутствии таковых должно быть написано NIL или (). С рабочими переменными обращаются примерно как со связанными переменными, но они не могут быть связаны ни с какими значениями через LAMBDA. Значение каждой рабочей переменной есть NIL до тех пор, пока ей не будет присвоено что-нибудь другое. Для присваивания рабочей переменной применяется форма SET. Чтобы присвоить переменной pi значение 3.14 пишется (SET (QUOTE PI)3.14). SETQ подобна SET, но она еще и блокирует вычисление первого аргумента. Поэтому (SETQ PI 3.14) – запись того же присваивания. SETQ обычно удобнее. SET и SETQ могут изменять значения любых переменных из более внешних функций.14 Значением SET и SETQ является значение их второго аргумента. Обычно в программе действия выполняются последовательно. Выполнение действия понимается как его вычисление и отбрасывание его значения. Действие программы обычно выполняются в большей степени ради эффекта действия, чем ради вычисленного значения. 14 Clisp – действуют на любом уровне. GO-форма, используемая для указания перехода (GO A) указывает, что программа продолжается действием, помеченным атомом A, причем это A может быть и из внешнего выражения PROG. Условные выражения в качестве действий программы являются базовым средством представления ветвлений. Если ни одно из пропозициональных выражений не истинно, то программа продолжается действием, следующим за условным выражением.15 RETURN – нормальное завершение программы. Аргумент RETURN вычисляется, что и является значением программы. Никакие последующие действия не вычисляются. Prog-выражение может быть рекурсивным. Функция REV, обращающая список и все подсписки, столь же естественно пишется с помощью рекурсивного Prog-выражения.
Пример18. Представление программы на языке Pascal. Функция rev обращает все уровни списка так, что rev от (A ((B C) D)) даст ((D (C B))A). 15 В Clisp все ветвления работают так.
Пример 19. Представление программы на языке Lisp В принципе, SET и SETQ могут быть реализованы с помощью ассоциативного списка примерно так же, как и поиск значения, только с сохранением связей, расположенных ранее изменяемой переменной: (defun SET (X Y) (cons (cons X Y) Alist)) ) Введенное таким образом присваивание обеспечивает вычислимость левой части присваивания, т. е. можно в программе вычислять имена переменных, значение которых предстоит поменять. Спецификация Таблица 28 Download 278.16 Kb. Do'stlaringiz bilan baham: |
ma'muriyatiga murojaat qiling