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

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

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

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



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

Файлы: 1 файл

labs1d.doc

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

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

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

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

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

       _( NOT (NULL NIL)) р NIL 

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

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

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

         а) (1 2 3 а 4)

         б) (1 2 3 4 а)

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

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

         д) ((1) ((2 3 а 4)))

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

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

  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))));
 

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

         а) 3.234*(45.6+2.43)

         б) 55+21.3+1.54*2.5432-32

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

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

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

         б) (+ 2 (* 3 5))

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

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

         д) (quote ‘quote)

         е) (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 Особенности свойств символов? 
 
 
 
 
 
 
 
 
 
 

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

       Тема: Определение функций. Функции ввода-вывода. Вычисления, изменяющие структуру.

       Цель: Получить навыки в написании функций. Изучить функции ввода-вывода. 

       
  1. Функции, определяемые пользователем.
  2. Функция ввода.
  3. Функции вывода.
  4. Вычисления, изменяющие структуру.
  5. Задание к лабораторной работе.
  6. Вопросы.
 

       1. Функции, определяемые пользователем.

       Определение функций и их вычисление в Лиспе основано на лямбда-исчислении Черча.

       В Лиспе лямбда-выражение имеет вид

       (LAMBDA (x1 x2 ... xn) fn) 

       Символ LAMBDA означает, что мы имеем дело с определением функции. Символы xi являются формальными параметрами определения, которые имеют аргументы в описывающем вычисления теле функции fn. Входящий в состав формы список, образованный из параметров, называют лямбда-списком.

       Телом функции является произвольная форма, значение которой может вычислить интерпретатор Лиспа. 

       _(lambda (x y) (+ x y)) 

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

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

       (лямбда-выражение а1 а2 ... аn) 

       Здесь ai - формы, задающие фактические параметры, которые вычисляются как обычно. 

       _((lambda (x y) (+ x y)) 1 2) р 3 

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

       _((lambda (x)                                                    ;Тело лямбда-вызова -

                      ((lambda (y) (list x y)) ‘b)) ‘a) р (a b)          лямбда-вызов. 

       Записывать вызовы функций полностью с помощью лямбда-вызовов не разумно, поскольку очень скоро выражения в вызове пришлось бы повторять, хотя разные вызовы одной функции отличаются лишь в части фактических параметров. Проблема разрешима путем именования лямбда-выражений и использования в вызове лишь имени.

       Дать имя и определить новую функцию можно с помощью функции DEFUN:

       (DEFUN имя лямбда-список тело) 

       DEFUN соединяет символ с лямбда-выражением, и символ начинает представлять определенные этим лямбда-выражением вычисления. Значением этой формы является имя новой функции.

       После именования функции  ее вызов осуществляется по имени и параметрам. 

       _(defun list1 (x y)

                    (cons x (cons y nil))) р list1

       _(list1 ‘c ‘n) р (c n) 

       (eval <выражение>)

       Функция возвращает результат выражения <выражение>, где <выражение> - любое выражение языка LISP. Например, дано:

       (setq a 123)

       (setq b 'a)

       (eval 4.0) р 4.000000

       (eval (abs -10)) р 10

       (eval a) р 123

       (eval b) р 123 

       2. Функция ввода.

       Лисповская функция чтения READ обрабатывает выражение целиком. Вызов функции осуществляется в виде

       _(READ)

       (Вводимое выражение) р              ;выражение пользователя

       р (ВВОДИМОЕ ВЫРАЖЕНИЕ)      ;значение функции READ

       ... 

       Функция не показывает, что она ждет ввода выражения. Она лишь читает выражение и возвращает в качестве значения само это выражение, после чего вычисления продолжаются.

       Если прочитанное выражение необходимо сохранить для дальнейшего использования, то вызов READ должен быть аргументом какой-нибудь формы, например присваивания (SETQ), которая свяжет полученное выражение: 

       _(SETQ input (READ))

       (+ 1 2)                                                ;введенное выражение

       (+ 1 2)                                                ;значение

       _input р (+1 2) 

       3. Функции вывода.

       Для вывода выражений используют несколько функций: PRINT, PRIN1, PRINC.

       Функция PRINT.

        Это функция с одним аргументом, которая сначала вычисляет значение аргумента, а затем выводит это значение. Функция PRINT перед выводом аргумента переходит на новую строку, а после него выводит пробел. Таким образом, значение выводится всегда на новую строку.  

       _(PRINT (+ 1 2))

       3                                                         ;вывод

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