Ознакомительная работа в среде MuLisp
Лабораторная работа, 19 Февраля 2011, автор: пользователь скрыл имя
Описание работы
Цель: Ознакомиться со средой MuLisp. Изучить базовые функции Лиспа, символы и их свойства, а также средства для работы с числами.
1.Основные положения программирования на Лиспе.
2.Загрузка системы, системный редактор.
3.Базовые функции языка. Символы, свойства символов.
4.Средства языка для работы с числами.
5.Задание к лабораторной работе.
6.Вопросы.
Файлы: 1 файл
labs1d.doc
— 151.50 Кб (Скачать файл)Лабораторная работа № 1.
Тема: Ознакомительная работа в среде MuLisp. Базовые функции Лиспа. Символы, свойства символов. Средст-ва языка для работы с числами.
Цель:
Ознакомиться со средой MuLisp. Изучить базовые функции
Лиспа, символы и их свойства, а также средства
для работы с числами.
- Основные положения программирования на Лиспе.
- Загрузка системы, системный редактор.
- Базовые функции языка. Символы, свойства символов.
- Средства языка для работы с числами.
- Задание к лабораторной работе.
- Вопросы.
1. Основные положения программирования на Лиспе.
- Лисп ориентирован на обработку нечисловых задач. Он основан на алгебре списочных структур, лямбда-исчислении и теории рекурсий.
- Язык имеет функциональную направленность, т. е. любое предложение заключенное в скобки, введенное вне редактора считается функцией и выполняется сразу после нажатия «ENTER».
- Чтобы предотвратить вычисление значения выражения, нужно перед этим выражением поставить апостроф «´». Апостроф перед выражением - это на самом деле сокращение лисповской функции QUOTE.
- В Лиспе формы представления программы и обрабатываемых ею данных одинаковы. И то и другое представляется списочной структурой имеющей одинаковую форму.
- Типы данных не связаны с именами объектов данных, а сопровождают сами объекты. Переменные могут в различные моменты времени представлять различные объекты.
- Основные типы данных языка - атомы и списки.
Атомы - это символы и числа.
Список - упорядоченная последовательность, элементами которой являются атомы либо списки. Списки заключаются в круглые скобки, элементы списка разделяются пробелами. Несколько пробелов между символами эквивалентны одному пробелу. Первый элемент списка называется «головой», а остаток , т. е. список без первого элемента, называется «хвостом. Список в котором нет ни одного элемента, называется пустым и обозначается «()» либо NIL.
- Символ - это имя, состоящее из букв, цифр и специальных знаков, которое обозначает какой-нибудь предмет, объект, действие. В Лиспе символы обозначают числа, другие символы или более сложные структуры, программы (функции) и другие лисповские объекты. Символы могут состоять как из прописных, так и из строчных букв, хотя в большинстве Лисп-систем, как и в описываемой здесь версии MuLisp, прописные и строчные буквы отождествляются и представляются прописными буквами.
- Символы T и NIL имеют в Лиспе специальное назначение: T - обозначает логическое значение истина, а NIL - логическое значение ложь.
- При генерации или считывании MuLispом нового символа, за его величину принимается он сам. Такая ссылка символа на себя называется автоссылкой.
- Создание программы на Лиспе - написание некоторой функции, возможно сложной, при вычислении использующей другие функции либо рекурсивно саму себя. На практике, написание программ осуществляется записью в файл определений функций, данных и других объектов с помощью имеющегося в программном окружении редактора. Файлу присваивается расширение LSP.
- Необязательно делать отступы в строках выражений, входящих в ваши функции. На самом деле, по желанию, вы можете написать всю программу в одну строку. Однако отступы в строках и пустые строки делают структуру программы понятней и более читабельней. Так же выравнивание начальных и конечных скобок основных выражений помогают убедиться в балансе ваших скобок.
- Определения функций могут храниться в файлах и загружаться используя функцию LOAD:
(load <имя файла>)
Эта функция загружает файл выражений и выполняет эти выражения. <Имя файла> - это строковая константа, которая представляет собой имя файла без расширения (подразумевается расширение ".lsp"). Если операция успешно завершена, LOAD возвращает имя последней функции, определенной в файле. Если операция не выполнена, LOAD возвращает имя файла в виде строкового выражения.
Функция LOAD не может вызываться из другой функции LISP. Она должна вызываться непосредственно с клавиатуры, в то время как ни одна другая функция LISP не находится в процессе выполнения.
- Интерпретатор считает файлами, содержащими исходные тексты программ на Лиспе, все файлы, имеющие расширение LSP.
- В связи с тем, что диалект MuLisp включает в себя сравнительно небольшой набор базовых функций, указанная Лисп-система обеспечивается библиотеками Лисп-функций, дополняющими базовый набор функциями, имеющимися в Common Lisp-е и других диалектах(Common.lsp, Array.lsp и т. д. ...).
2. Загрузка системы. Системный редактор.
Запуск системы MuLisp с расширением Common.lsp осуществляется командой:
MuLisp87.com Common.lsp.
После
нескольких секунд загрузки на экране
дисплея появится сообщение:
MuLisp-87 IBM PC MS-DOS Version 6.01 (11/05/87)
(C ) Copyright SoftWarehouse, Inc., 1983, 1985, 1986, 1987.
All rights Reserved Worldwide.
;
Loading C:Common.lsp
После чего появится знак $, означающий приглашение системы к работе. Для загрузки системного редактора необходимо набрать следующую команду:
(LOAD edit.lsp)
Системный редактор начинает работать. Он чистит экран рисует рамку и выдает на экран свое меню:
Alpha,
Block, Delete, Jump, List, Options, Print, Quit, Replace, Search, Transfer,
Undelete и
Window.
Затем система ждет, пока пользователь не выберет одну из опций. Для этого необходимо установить курсор на выбранной опции и нажать клавишу «Enter». Переход от одной опции к другой производится с помощью клавиши «Tab».
- Alpha: включение режима редактирования.
- Block: работа с блоком. Выделение, копирование, удаление, перенос и др.
- Delete: удаление блока, символа, слова, строки.
- Jump: переход в начало или конец текста программы, вверх-вниз страницы.
- List: работа со списком. Удаление, переход к предыдущему, последующему.
- Options: работа с цветами, монитором, звуком.
- Print: печать текста программы.
- Quit: выход из системы.
- Replace: изменение строки.
- Search: поиск строки. Причем строчные и прописные буквы различаются.
- Transfer: работа с файлами. Запись, нахождение, объединение, удаление.
- Undelete: восстановление.
- Window: работа с окнами. Открыть, закрыть, перейти к другому и т. д.
3. Базовые функции языка.
Функции разбора.
Функция CAR возвращает в качестве значения первый элемент списка.
(CAR список) р S - выражение (атом либо
список).
_(CAR ‘(a b c d)) р a
_(CAR ‘((a b) c d)) р (a b)
_(CAR ‘(a)) р a
_(CAR
NIL) р NIL
«Голова пустого
списка - пустой список.»
Вызов функции CAR с аргументом (a b c d) без апострофа был бы проинтерпретирован как вызов функции «a» с аргументом «b c d», и было бы получено сообщение об ошибке.
Функция CAR имеет
смысл только для аргументов, являющихся
списками.
(CAR
‘a) р Error
Функция CDR -
возвращает в качестве значения хвостовую
часть списка, т. е. список, получаемый
из исходного списка после удаления из
него головного элемента:
(CDR список) р список
Функция CDR определена
только для списков.
_(CDR ‘(a b c d)) р (b c d)
_(CDR ‘((a b) c d)) р (c d)
_(CDR ‘(a (b c d))) р ((b c d))
_(CDR ‘(a)) р NIL
_(CDR NIL) р NIL
_(CDR
‘a) р
Error
Функция создания CONS.
Функция CONS строит
новый список из переданных ей в качестве
аргументов головы и хвоста.
(CONS голова хвост)
Для
того чтобы можно было включить первый
элемент функции CONS в качестве первого элемента
значения второго аргумента этой функции,
второй аргумент должен быть списком.
Значением функции CONS всегда будет список:
(CONS
s-выражение список) р список
_(CONS ‘a ‘(b c)) р (a b c)
_(CONS ‘(a b) ‘(c d)) р ((a b) c d)
_(CONS (+ 1 2) ‘(+ 3)) р (3 + 3)
_(CONS ‘(a b c) NIL) р ((a b c))
_(CONS NIL ‘(a b c)) р (NIL a b c)
Предикаты ATOM, EQ, EQL, EQUAL.
Предикат - функция, которая определяет, обладает ли аргумент определенным свойством, и возвращает в качестве значения NIL или T.
Предикат ATOM
- проверяет, является ли аргумент атомом:
(ATOM
s - выражение)
Значением
вызова ATOM будет T, если
аргументом является атом, и
NIL - в противном случае.
_(ATOM ‘a) р T
_(ATOM ‘(a b c)) р NIL
_(ATOM NIL) р T
_(ATOM
‘(NIL)) р
NIL