LABS1D (663904), страница 2

Файл №663904 LABS1D (ЛИСП) 2 страницаLABS1D (663904) страница 22016-07-31СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 2)

Свойства символов независимо от их значений доступны из всех контекстов пока не будут явно изменены или удалены. Изменение значения символа не влияет на другие свойства. Свойства символа передаются другому символу с помощью функции 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. Запишите последовательности вызовов 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 ;вывод

3 ;значение

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

Функции PRIN1 и PRINC.

Эти функции работают так же, как PRINT, но не переходят на новую строку и не выводят пробел:

(PRIN1 5) ð 55

(PRINC 4) ð 44

Обеими функциями можно выводить кроме атомов и списков и другие типы данных которые мы рассмотрим позже:

_(PRIN1 «CHG») ð «CHG»«CHG»

_(PRINC «tfd») ð tfd«tfd» ;вывод без кавычек,

;результат - значение аргумента

С помощью функция PRINC можно получить более приятный вид. Она выводит лисповские объекты в том же виде, как и PRIN1, но преобразует некоторые типы данных в более простую форму.

Функция TERPRI.

Эта функция переводит строку. У функции TERPRI нет аргументов и в качестве значения она возвращает NIL:

_(DEFUN out (x y)

(PRIN1 x) (PRINC y)

(TERPRI) (PRINC (LIST ‘x ‘y)) ð out

_(out 1 2) ð 12

(1 2)

4. Вычисления, изменяющие структуру.

Основными функциями, изменяющими физическую структуру списков, являются RPLACA и RPLACD, которые уничтожают прежние и записывают новые значения в поля CAR и CDR списочной ячейки:

(RPLACA ячейка значение-поля) ;поле CAR

(RPLACD ячейка значение-поля) ;поле CDR

Первым аргументом является указатель на списочную ячейку, вторым - записываемое в нее новое значение поля CAR или CDR. Обе функции возвращают в качестве результата указатель на измененную списочную ячейку:

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

_(RPLACA a ‘d) ð (d c d)

_(RPLACD a ‘(o n m)) ð (d o n m)

_a ð (d o n m)

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

1. Определите с помощью лямбда-выражения функцию, вычисляющую:

  1. +y-x*y;

  2. x*x+y*y;

  3. x*y/(x+y)-5*y;

2. Определите функции (NULL x), (CADDR x) и (LIST x1 x2 x3) с помощью базовых функций. (Используйте имена NULL1, CADDR1 и LIST1, чтобы не переопределять одноименные встроенные функции системы.

3. Используя композицию, напишите функции, которые осуществляют обращение списка из 2, 3, ... , n элементов.

4. Используя композицию описанных выше предикатов и логических связок, постройте функцию, которая проверяет, является ли ее аргумент:

a) списком из 2, 3, ... элементов;

b)списком из 2, 3, ... атомов;

5. Напишите функцию:

  1. такую, что P(n) для произвольного целого n есть список из трех элементов, а именно: квадрата, куба и четвертой степени числа n;

  2. для двух аргументов значением которой является список из двух элементов (разности и остатка от деления);

  3. такую, что A(n) есть список (The answer is n). Так, значением (A 12) будет (The answer is 12);

  4. семи аргументов, значением которой служит сумма всех семи аргументов.

6. Для каждого из следующих условий определить функцию одного аргумента L , которая имеет значение T, если условие удовлетворяется, и NIL в противном случае:

  1. n-ый элемент L есть 12;

  2. n-ый элемент L есть атом;

  3. L имеет не более n элементов (атомов или подсписков).

7. Напишите функцию, которая вводит фразу на естественном языке и преобразует ее в список.

8. Напишите функцию, которая спрашивает у пользователя ФИО студента из группы (список группы составлен раньше) и выдает следующие данные о нем:

  1. год рождения;

  2. средний бал;

  3. родителей;

  4. списки свойств, присвоенные ему раньше.

9. Напишите функцию:

  1. от одного аргумента (ФИО любого студента), замещающую в списке с данными о нем (написанном раньше) подсписки со средними балами на списки свойств;

  2. вычисляющую средние балы, беря данные из списков свойств.

10. Каковы будут значения выражений (RPLACA x x) и (RPLACD x x), если:

  1. x = ’(a b);

  2. x = ’(a);

11. Вычислите значение следующих выражений:

  1. (RPLACD ‘(a) ‘b);

  2. (RPLACA ‘(a) ‘b);

  3. (RPLACD (CDDR ‘(a b x)) ‘c);

  4. (RPLACD ‘(nil) nil)

6. Вопросы.

1. Что такое лямбда-выражение?

2. Для чего используется функция DEFUN?

3. Чем различаются основные функции вывода?

4. Что возвращает в качестве значения функция READ?

5. Особенности функций, изменяющих структуру?

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

Тема: Организация вычислений в Лиспе.

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

1. Предложения LET и LET*.

2. Последовательные вычисления.

3. Разветвление вычислений.

4. Циклические вычисления.

Характеристики

Тип файла
Документ
Размер
151,5 Kb
Материал
Тип материала
Учебное заведение
Неизвестно

Список файлов реферата

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