LABS1D (ЛИСП)

2016-07-31СтудИзба

Описание файла

Документ из архива "ЛИСП", который расположен в категории "". Всё это находится в предмете "информатика" из , которые можно найти в файловом архиве . Не смотря на прямую связь этого архива с , его также можно найти и в других разделах. Архив можно найти в разделе "рефераты, доклады и презентации", в предмете "информатика, программирование" в общих файлах.

Онлайн просмотр документа "LABS1D"

Текст из документа "LABS1D"

Лабораторная работа № 1.

Тема: Ознакомительная работа в среде MuLisp. Базовые функции Лиспа. Символы, свойства символов. Средст-ва языка для работы с числами.

Цель: Ознакомиться со средой MuLisp. Изучить базовые функции Лиспа, символы и их свойства, а также средства для работы с числами.

  1. Основные положения программирования на Лиспе.

  2. Загрузка системы, системный редактор.

  3. Базовые функции языка. Символы, свойства символов.

  4. Средства языка для работы с числами.

  5. Задание к лабораторной работе.

  6. Вопросы.

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

Предикат EQ сравнивает два символа и возвращает значение T, если они идентичны, в противном случае - NIL. С помощью EQ сравнивают только символы или константы T и NIL.

_(EQ ‘a ‘b) ð NIL

_(EQ ‘a (CAR ‘(a b c))) ð T

_(EQ NIL ()) ð T

Предикат EQL работает так же как и EQ, но дополнительно позволяет сравнивать однотипные числа.

_(EQL 2 2) ð T

_(EQL 2.0 2.0) ð T

_(EQL 2 2.0) ð NIL

Для сравнения чисел различных типов используют предикат «=». Значением предиката «=» является T в случае равенства чисел независимо от их типов и внешнего вида записи.

(= 2 2.0) ð T

Предикат EQUAL проверяет идентичность записей. Он работает как EQL , но дополнительно проверяет одинаковость двух списков. Если внешняя структура двух лисповских объектов одинакова, то результатом EQUAL будет T.

_(EQUAL ‘a ‘a) ð T

_(EQUAL ‘(a b c) ‘(a b c)) ð T

_(EQUAL ‘(a b c) ‘(CONS ‘a ‘(b c))) ð T

_(EQUAL 1.0 1) ð NIL

Функция NULL проверяет на пустой список.

_(NULL ‘()) ð T

Вложенные вызовы CAR и CDR.

Комбинации вызовов CAR и CDR образуют уходящие в глубину списка обращения, в Лиспе для этого используется более короткая запись. Желаемую комбинацию вызовов CAR и CDR можно записать в виде одного вызова функции:

(C...R список )

Вместо многоточия записывается нужная комбинация из букв A и D (для CAR и CDR соответственно). В один вызов можно объединять не более четырех функций CAR и CDR.

(CADAR x) ó (CAR (CDR (CAR x)))

_(CDDAR ‘((a b c d) e)) ð (c d)

_(CDDR ‘(k l m)) ð (M)

Функция LIST - создает список из элементов. Она возвращает в качестве своего значения список из значений аргументов. Количество аргументов произвольно.

_(LIST ‘a ‘b ‘c) ð (a b c)

_(LIST ‘a ‘b (+ 1 2)) ð (a b 3)

4. Символы, свойства символов.

Функции присваивания: SET, SETQ, SETF.

Функция SET - присваивает символу или связывает с ним некоторое значение. Причем она вычисляет оба своих аргумента. Установленная связь действительна до конца работы, если этому имени не будет присвоено новое значение функцией SET.

_(SET ‘a ‘(b c d)) ð (b c d)

_a ð(b c d)

_(SET (CAR a) (CDR (o f g)) ð (f g)

_a ð (b c d)

_(CAR a) ð b

_b ð (f g)

Значение символа вычисляется с помощью специальной функции Symbol-value, которая возвращает в качестве значения значение своего аргумента.

_(Symbol-value (CAR a)) ð (f g)

Функция SETQ - связывает имя, не вычисляя его. Эта функция отличается от SET тем, что вычисляет только второй аргумент.

_(SETQ d ‘(l m n)) ð (l m n)

Функция SETF - обобщенная функция присваивания. SETF используется для занесения значения в ячейку памяти.

( SETF ячейка-памяти значение)

_(SETF ячейка ‘(a b c)) ð (a b c)

_ ячейка ð (a b c)

Переменная «ячейка» без апострофа указывает на ячейку памяти, куда помещается в качестве значения список (a b c).

Свойства символа.

В Лиспе с символом можно связать именованные свойства. Свойства символа записываются в хранимый вместе с символом список свойств. Свойство имеет имя и значение. Список свойств может быть пуст. Его можно изменять или удалять без ограничений.

(имя1 знач1 имя2 знач2 ... имяN значN )

Пусть имя студент имеет следующий список свойств:

(имя Иван отчество Иванович фамилия Иванов)

Функция GET - возвращает значение свойства, связанного с символом.

(GET символ свойство )

При отсутствии свойства функция GET возвращает NIL в качестве ответа.

_(GET ‘студент ‘имя) ð Иван

_(GET ‘студент ‘группа) ð NIL

Присваивание и удаление свойств.

Для присваивания символу свойств в MuLisp (как и в Common Lisp) отдельной функции нет. Для этого используются уже известные нам функции:

(SETF (GET символ свойство) значение)

_(SETF (GET ‘студент ’группа) ’РВ-90-1) ð РВ-90-1

_(GET ‘студент ’группа) ð РВ-90-1

Удаление свойства и его значения осуществляется псевдофункцией REMPROP:

Эта функция возвращает в качестве значения имя удаляемого свойства. Если удаляемого свойства нет, то возвращается NIL.

(REMPROP символ свойство)

_(REMPROP ‘студент ’группа) ð группа

_(GET ‘студент ’группа) ð NIL

_(REMPROP ‘студент ’ср_бал) ð NIL

Для просмотра всего списка свойств используют функцию SYMBOL-PLIST. Значением функции является весь список свойств.

(SYMBOL-PLIST ‘СИМВОЛ)

(SYMBOL-PLIST ‘студент) ð (имя Иван отчество Иванович фамилия Иванов)

Свежие статьи
Популярно сейчас
Зачем заказывать выполнение своего задания, если оно уже было выполнено много много раз? Его можно просто купить или даже скачать бесплатно на СтудИзбе. Найдите нужный учебный материал у нас!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Нашёл ошибку?
Или хочешь предложить что-то улучшить на этой странице? Напиши об этом и получи бонус!
Бонус рассчитывается индивидуально в каждом случае и может быть в виде баллов или бесплатной услуги от студизбы.
Предложить исправление
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
5138
Авторов
на СтудИзбе
443
Средний доход
с одного платного файла
Обучение Подробнее