Задания к лабораторной работе.
1. Запишите следующие лямбда-вызовы с использованием формы LET и вычислите их на машине: a) ((LAMBDA (x y) (LIST x y) ‘(+ 1 2) ‘c); b) ((LAMBDA (x y) ((LAMBDA (z) (LIST x y z)) ‘c) ‘a ‘b); c) ((LAMBDA (x y) (LIST x y)) ((LAMBDA (z) z) ‘a) ‘b). 2. Напишите с помощью композиции условных выражений функции от четырех аргументов AND4(x1 x2 x3 x4) и OR4(x1 x2 x3 x4), совпадающие с функциями AND и OR от четырех аргументов. 3. Пусть L1 и L2 - списки. Напишите функцию, которая возвращала бы T, если N-ые два элемента этих функций соответственно равны друг другу, и NIL в противном случае. 4. Написать условное выражение (используя COND), которое: a) дает NIL, если L атом, и T в противном случае; b) выдает для списка L,состоящего из трех элементов, первый из этих трех, который является атомом, или список, если в списке нет элементов атомов. 5. С помощью предложений COND или CASE определите функцию, которая возвращает в качестве значения столицу заданного аргументом государства. 6. Напишите с помощью условного предложения функцию, которая возвращает из трех числовых аргументов значение большего, меньшего по величине числа. 7. Запрограммируйте с помощью предложения DO функцию факториал. 8. Запишите с помощью предложения PROG функцию (аналог встроенной функции LENGTH), которая возвращает в качестве значения длину списка (количество элементов на верхнем уровне). 9. Используя функцию COND, напишите функцию, которая спрашивает у пользователя ФИО двух студентов из группы (список группы составлен раньше) для которых: а) сравнивает год рождения и выдает результат (кто старше или что они ровесники); б) сравнивает средний бал и выдает сообщение о результатах сравнения; с) проверяет родственные связи (если одни и те же родители, то они родственники) и выдает об этом сообщение.
10. Напишите подобные функции, но уже используя функцию IF. Для двух последних заданий вывод информации осуществить при помощью функций PRINT, PRIN1, PRINC.
Center - находит среднее из трех чисел: (DEFUN center (x y z) (COND ((> x y) (IF (< x z) (PROGN (PRINT x) (PRINT «среднее (1)»)) (IF (> y z) (PROGN (PRINT y) (TERPRI) (PRINT «среднее (2)»)) (PROGN (PRIN1 z) (PRIN1«среднее (3)»))))) ((< x y) (IF (< y z) (PROGN (PRIN1 y) (TERPRI) (PRIN1 «среднее (4)»)) (IF (> x z) (PROGN (PRINC x) (PRINC «среднее (5)»)) (PROGN (PRINC z) (TERPRI) (PRINC «среднее (6)»))))) (T (PRINC «ошибка ввода»)))) Вопросы. 1. Для чего используется предложение LET? 2. В чем его отличие от предложения LET*? 3. Чем различаются функции COND и IF? 4. Каковы возвращаемые ими значения? 5. Чем различаются функции PROG1 и PROGN? 6. Почему не желательно использовать операторы передачи управления? Чем их можно заменить?
Лабораторная работа №4. Тема: Рекурсия в Лиспе. Функционалы и макросы. Цель: Изучить основы программирования с применением рекурсии. Научиться работать с функционалами и макросами. Рекурсия. Различные формы рекурсии. Применяющие функционалы. Отображающие функционалы. Макросы. Задание к лабораторной работе. Вопросы.
Читайте также: II. Задания с кратким ответом Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|