Ознакомительная работа в среде MuLisp

Автор работы: Пользователь скрыл имя, 19 Февраля 2011 в 15:30, лабораторная работа

Описание работы

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



1.Основные положения программирования на Лиспе.
2.Загрузка системы, системный редактор.
3.Базовые функции языка. Символы, свойства символов.
4.Средства языка для работы с числами.
5.Задание к лабораторной работе.
6.Вопросы.

Файлы: 1 файл

labs1d.doc

— 151.50 Кб (Скачать файл)

       Лабораторная работа № 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 

Информация о работе Ознакомительная работа в среде MuLisp