Вычисления, изменяющие структуру.
Основными функциями, изменяющими физическую структуру списков, являются 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)
Задания к лабораторной работе. 1. Определите с помощью лямбда-выражения функцию, вычисляющую: a) +y-x*y; b) x*x+y*y; c) 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. Напишите функцию: a) такую, что P(n) для произвольного целого n есть список из трех элементов, а именно: квадрата, куба и четвертой степени числа n; b) для двух аргументов значением которой является список из двух элементов (разности и остатка от деления); c) такую, что A(n) есть список (The answer is n). Так, значением (A 12) будет (The answer is 12); d) семи аргументов, значением которой служит сумма всех семи аргументов. 6. Для каждого из следующих условий определить функцию одного аргумента L, которая имеет значение T, если условие удовлетворяется, и NIL в противном случае:
a) n-ый элемент L есть 12; b) n-ый элемент L есть атом; c) L имеет не более n элементов (атомов или подсписков). 7. Напишите функцию, которая вводит фразу на естественном языке и преобразует ее в список. 8. Напишите функцию, которая спрашивает у пользователя ФИО студента из группы (список группы составлен раньше) и выдает следующие данные о нем: a) год рождения; b) средний бал; c) родителей; d) списки свойств, присвоенные ему раньше. 9. Напишите функцию: a) от одного аргумента (ФИО любого студента), замещающую в списке с данными о нем (написанном раньше) подсписки со средними балами на списки свойств; b) вычисляющую средние балы, беря данные из списков свойств. 10. Каковы будут значения выражений (RPLACA x x) и (RPLACD x x), если: a) x = ’(a b); b) x = ’(a); 11. Вычислите значение следующих выражений: a) (RPLACD ‘(a) ‘b); b) (RPLACA ‘(a) ‘b); c) (RPLACD (CDDR ‘(a b x)) ‘c); d) (RPLACD ‘(nil) nil)
Вопросы. 1. Что такое лямбда-выражение? 2. Для чего используется функция DEFUN? 3. Чем различаются основные функции вывода? 4. Что возвращает в качестве значения функция READ? 5. Особенности функций, изменяющих структуру Лабораторная работа №3. Тема: Организация вычислений в Лиспе. Цель: Изучить основные функции и их особенности для организации вычислений в Лиспе. 1. Предложения LET и LET*.
Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|