14730

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

Лабораторная работа

Информатика, кибернетика и программирование

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

Русский

2013-06-13

76 KB

11 чел.

Лабораторная работа № 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. Базовые функции языка.

Функции разбора.

Функция CAR возвращает в качестве значения первый элемент списка.

(CAR  список)  S - выражение (атом либо список).

_(CAR ‘(a b c d)) a

_(CAR ‘((a b) c d))  

_(CAR ‘(a))  

_(CAR NIL)               «Голова пустого списка - пустой список.»

Вызов функции CAR с аргументом (a b c d) без апострофа был бы проинтерпретирован как вызов функции «a» с аргументом «b c d», и было бы получено сообщение об ошибке.

Функция CAR имеет смысл только для аргументов, являющихся списками.

(CARa)  Error

Функция CDR - возвращает в качестве значения хвостовую часть списка, т. е. список, получаемый из исходного списка после удаления из него головного элемента:

(CDR список) список 

Функция CDR определена только для списков.

_(CDR ‘(a b c d)) (b c d)

_(CDR ‘((a b) c d))  

_(CDR ‘(a (b c d)))  

_(CDR ‘(a))  

_(CDR NIL)  

_(CDR ‘a)  

Функция создания CONS.

Функция CONS строит новый список из переданных ей в качестве аргументов головы и хвоста.

(CONS голова хвост)

Для того чтобы можно было включить первый элемент функции CONS в качестве первого элемента значения второго аргумента этой функции, второй аргумент должен быть списком. Значением функции CONS всегда будет список:

(CONS s-выражение список)  список

_(CONS ‘a ‘(b c)) (a b c)

_(CONS ‘(a b) ‘(c d))  

_(CONS (+ 1 2) ‘(+ 3))  

_(CONS ‘(a b c) NIL)  

_(CONS NIL ‘(a b c))  

 

Предикаты ATOM, EQ, EQL, EQUAL.

Предикат - функция, которая определяет, обладает ли аргумент определенным свойством, и возвращает в качестве значения NIL или T.

Предикат ATOM - проверяет, является ли аргумент атомом:

(ATOM s - выражение)

Значением вызова ATOM будет T, если аргументом является атом, и NIL - в противном случае.

_(ATOM ‘a) T

_(ATOM ‘(a b c))  

_(ATOM NIL)  

_(ATOM ‘(NIL))  

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

_(EQ ‘a ‘b) NIL

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

_(EQ NIL ())  

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

_(EQL 2 2) T

_(EQL 2.0 2.0)  

_(EQL 2 2.0)  

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

(= 2 2.0)  

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

_(EQUAL ‘a ‘a) T

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

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

_(EQUAL 1.0 1)  

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

_(NULL ‘())  

Вложенные вызовы 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))  

_(CDDR ‘(k l m))  

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

_(LIST ‘a ‘b ‘c)  

_(LISTab (+ 1 2))  

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

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

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

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

_a

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

_a  

_(CAR a)  

_b  

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

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

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

_(SETQ d ‘(l m n))  

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

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

_(SETF ячейка ‘(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 ‘студент) (имя Иван отчество Иванович фамилия Иванов)

Свойства символов независимо от их значений доступны из всех контекстов пока не будут явно изменены или удалены. Изменение значения символа не влияет на другие свойства. Свойства символа передаются другому символу с помощью функции SETQ.

5. Средства языка для работы с числами. (Математические и логические функции).

В языке Лисп как для вызова функций, так и для записи выражения принята единообразная префиксная форма записи, при которой как имя функции или действия, так и сами аргументы записываются внутри скобок:

(f x), (g x y), (h x (g y z)) и т. д.

Арифметические действия:

(+ числа) - сложение чисел

(- число числа) - вычитание чисел из числа

(* числа) - умножение чисел

и т. д.

_(+ 5 7 4) 16

_(- 10 3 4 1) 2

_(/ 15 3) 5

Сравнение чисел:

(= число числа) равны (все)

(<  число числа) меньше (для всех)

(> число числа) больше (для всех)

и т. д.

Числовые предикаты:

(ZEROP число) проверка на ноль

(MINUSP число) проверка на отрицательность

и т. д.

Логические действия:

(NOT объект) логическое отрицание

(AND (формы)) логическое И

(OR (формы))  логическое ИЛИ

_(AND (ATOM NIL) (NULL NIL) (EQ NIL NIL)) T

_( NOT (NULL NIL))  NIL

Кроме приведенных, существует множество других, но не менее полезных функций.

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

1. Записать и вычислить s-выражения для следующих формул:

  1.  
    1.  (3 * 17) + (4 * 19)

  1.  Построить диаграммы списочных ячеек для выражений:
    1.  (+ 3 5)
    2.  (x (a b (c)))
    3.  (/(* (+ 3 7) (- 10 7)) (3))

3. Запишите последовательности вызовов CAR и CDR, выделяющие из приведенных ниже списков символ «а». Упростите эти вызовы с помощью функций C...R.

а) (1 2 3 а 4)

б) (1 2 3 4 а)

в) ((1) (2 3) (а 4))

г) ((1) ((2 3 а) (4)))

д) ((1) (2 X) (3 (4)))

е) (1 (2 (3 4 X)))

ж) ((1) ((2 3 а 4)))

з) (1 (2 ((3 4 (5 (6 а))))))

4. Вычислить выражения:

  1.  ’( + 2 (* 3 4))
    1.  (+ 2 ’(* 3 4))
    2.  (+ 2 (’* 3 4))
    3.  (+ 2 (* 3 ’4))
    4.  (caar ‘(A))
    5.  (caar ‘((A)))  
    6.   (car ‘(A B C))
    7.   (caadr (cadr ’(a ’(b (c)))))
    8.   (list  (+ 2 3) (- 5 1) (caar ’ ((3 4 5))) (cddr ‘ (+ 2 3)))
    9.  (cons nil ’(1 2 3))
    10.  (car ’(car ( a b c)))
    11.  (cdr (car (cdr ’(a b c))))
    12.  (list (cons nil nil))
    13.  (cons ’(nil) ’(nil))
    14.  (cons (car ’(a b)) (cdr ’(a b)))
    15.   (list ’a ’b) ’(car (c d))

5. Каково значение каждого из следующих выражений:

  1.  (ATOM (CAR (QUOTE ((1 2) 3 4))));
  2.  (NULL (CDDR (QUOTE ((5 6) (7 8)))));
  3.  (EQUAL (CAR (QUOTE ((7 )))) (CDR (QUOTE (5 7))));
  4.  (ZEROP (CADDDR (QUOTE (3 2 1 0))));

6. Проделайте следующие вычисления с помощью интерпретатора Лиспа:

а) 3.234*(45.6+2.43)

б) 55+21.3+1.54*2.5432-32

в) (34-21.5676-43)/(342+32*4.1)

7. Определите значения следующих выражений:

а) ‘(+ 2 (* 3 5))

б) (+ 2 ‘(* 3 5))

в) (+ 2 (’ * 3 5))

г) (+ 2 (* 3 ’5))

д) (quotequote)

е) (quote 6)

5.1 Составьте список студентов своей группы

(ФИО ФИО ... ФИО)

5.2 Для каждого студента

а) с помощью функции LIST составьте следующие списки:

Для самого студента - (дата рождения), (адрес), (средний бал по лекционным занятиям), (средний бал по практическим занятиям), (средний бал по лабораторным работам). Для отца и матери - (ФИО), (дата рождения), (адрес), (место работы).

б) с помощью функций CONS и SETQ объедините полученные списки и присвойте их в виде значений символам, означающим ФИО каждого студента:

ФИО ст. - (((дата рождения ст.) (адрес ст.)((ср. бал(до десятых) по лекционным занятиям) (ср. бал по практическим занятиям) (ср. бал по лабораторным работам))) (((ФИО отца) (дата рождения отца) (адрес) (место работы отца)) ((ФИО матери) (дата рождения матери) (адрес) (место работы матери)))).

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

а) год рождения;

б) успеваемость (с учетом того, что число, характеризующее средний бал, может быть как целым, так и дробным );

в) выясните, не являются ли они родственниками;

г) выясните, живут ли они с родителями.

6.1 Для каждого студента составьте списки свойств

а) оценки по лекциям;

б) оценки по практикам;

в) оценки по лабораторным работам.

6.2 Для произвольно выбранных студентов сравнить свойства.

    

7. Вопросы.

1 Перечислите базовые функции.

2 Каковы типы аргументов базовых функций?

3 Какие значения они возвращают?

4 Что такое предикат?

5 Назовите основные отличия предикатов EQ, EQL, EQUAL и =.

6 Назовите отличия функций CONS и LIST.

7 Что такое символ?

8 Различия функций SET, SETQ, SETF?

9 Особенности свойств символов?


 

А также другие работы, которые могут Вас заинтересовать

21566. Международная экономическая интеграция. Отношения ЕС и России 46 KB
  Трех организаций: Европейского объединения угля и сталиЕОУС;Парижский договор о создании ЕОУС вступил в силу 1951г.; Европейского экономического сообществаЕЭС; Римский договор о создании ЕЭС заключен в 1957г.; Европейского сообщества по атомной энергииЕвратом; договор вступил в силу с1958 г. Интересы европейцев на международном уровне представляются рядом общих институтов: Европейская Комиссия Совет министров Европейский Парламент Суд Счетная палата Кроме этого главы государств и правительств и...
21567. Международная миграция рабочей силы 124.5 KB
  Международная миграция рабочей силы. Лекция: Международная миграция рабочей силы. План: Сущность формы и причины международной миграции рабочей силы. Мировой рынок рабочей силы.
21568. Жизненный цикл: эпигенез идентичности 34.25 KB
  [10;100] Каждый человек идет своим путем развития переживает свои кризисы и находит их разрешение теми способами которые должны быть здесь описаны последовательно проходя от начала до конца выделенные стадии.[10;107] В этом смысле можно говорить об инкорпоративной вбирающей стадии на которой ребенок если можно так выразиться берет то что ему предлагают. [10;107] На второй оральной стадии окончательно формируются способности добиваться и получать удовольствие в более активной и определенно направленной инкорпоративной...
21569. Проблема психического развития ребенка 19.9 KB
  Ключевые слова: Психические процессы Ведущий тип деятельности Стадия Психофизиологических функциях .в изучении развития психики ребенка следует исходить из анализа развития его деятельности так как она складывается в данных конкретных условиях его жизни. Только при таком подходе исходящем из анализа содержания самой развивающейся деятельности ребенка может быть правильно понята и ведущая роль воспитания воздействующего именно на деятельность ребенка на его отношения к действительности и поэтому определяющего его психику его...
21570. Средства общения 17.46 KB
  Средства общения Лисина М. В данной статье рассматривается проблемы общения взаимосвязь и психологического развития личностного становления ребенка Ключевые слова: Мимические средства общения Речь Позы Предметные движения Внимание Вокализация Три категории средств общения перечислены в том порядке в котором они появляются в онтогенезе; они составляют основные коммуникативные операции в дошкольном детстве Экспрессивномимические средства общения. Своеобразие выразительных средств общения в том что они служат проявлением эмоциональных...
21571. Закономерности поуровневого развития личности в онтогенезе 25.07 KB
  [6;110] Выделяют две социальные позиций ребенка по отношению к обществу условно названные я в обществе и я и общество . Целенаправленное рассмотрение в качестве объекта исследования особенностей социального развития детей условий становления их социальной зрелости и анализ ее формирования на разных этапах современного детства позволили вычленить два основных типа реально существующих позиций ребенка по отношению к обществу условно названных нами я в обществе и я и общество [6;111] Первая позиция где акцент делается на себя отражает...
21572. Комплексная характеристика развития игры 50.5 KB
  Комплексная характеристика развития игры . Изучение развития ролевой игры интересно в двояком отношении: вопервых при таком исследовании глубже раскрывается сущность игры; вовторых раскрытие взаимосвязи отдельных структурных компонентов игры в их развитии может помочь в педагогическом руководстве в формировании этой важнейшей деятельности ребенка [9;202] Структура игр претерпевает также большие изменения: от бессюжетных состоящих из ряда часто не связанных друг с другом эпизодов у детей трехчетырех лет они превращаются в игры с...
21573. Этапы формирования личности в онтогенезе 21.28 KB
  [1;180] Формирование личности ребенка происходит под влиянием социума. психическое развитие ребенка формирование его личности может быть понятно лишь в рамках его социализации т.[1;181] Биологические предпосылки так же играют значительную роль в формировании личности ребенка. Следует признать что не существует ни одной врожденной особенности организма которая была бы полностью нейтральной для психического развития ребенка.
21574. Краткий словарь психологических терминов 86.51 KB
  telegraphic speech один из ранних этапов развития детской речи переходный к овладению речью взрослых Л. Специальная речевая работа с детьми правильная речь окружающих взрослых исключающая подстраивание под несовершенную речь ребенка служат средством профилактики а также коррекции если этот этап развития речи затянулся А. В случаях ее развития у близнецов рекомендуется кроме того их временное разъединение АНАЛЬНАЯ СТАДИЯ англ. Фрейда 2я стадия психосексуального развития в возрасте ок.