- •2. Описание лабораторных работ по функциональному программированию на языке лисп
- •2.1. Краткие теоретические сведения по программированию на языке Лисп
- •Основные функции обработки списков
- •Присваивание значений
- •Предикаты
- •Определение функций
- •Ввод-вывод
- •2.2. Лабораторная работа по теме «Знакомство с основными понятиями в системе программирования Лисп»
- •2.3. Лабораторная работа по теме «Решение задач с ветвлением в системе программирования Лисп»
- •2.4. Лабораторная работа по теме «Реализация рекурсии на языке Лисп»
- •2.5. Лабораторная работа по теме «Обработка списков на языке программирования Лисп»
2.2. Лабораторная работа по теме «Знакомство с основными понятиями в системе программирования Лисп»
Учебные цели: Знакомство с системой программирования Лисп. Пpиобpетение умений и навыков по pазpаботки пpостейших пpогpамм с pазличными типами данных
Порядок выполнения работы:
Изучить краткое теоретическое введение по по программированию на языке Лисп.
Выполнить предложенные задания из практической части в соответствии с предложенным преподавателем варианта.
Оформить отчет по лабораторной работе
Практическая часть
1. Представить следующие списки в виде списочных ячеек:
'(open close halph)
'((TOOL) (call))
'((open1) (close2) (halph3))
'((TOOL1) (call2)) ((sell)))
'((one) for all (and(me(for you))))
'(((TOOL) (call)) ((sell)))
2. Используя только функции CAR и CDR, написать выражения,
возвращающие:
1) второй; 2) третий; 3) четвертый элементы заданного списка.
3. Что будет в результате вычисления выражений
а) (CAADR '((blue cube) (red pyramid))) c) (CADR '((abc) (def) (ghi)))
b) (CDAR '((abc) (def) (ghi))) d) (CADDR '((abc) (def) (ghi)))
4. Напишите результат вычисления выражений:
(list 'Fred 'and Wilma) (cons 'Fred '(and Wilma))
(list 'Fred '(and Wilma)) (cons 'Fred '(Wilma))
(cons Nil Nil) (list Nil Nil)
(cons T Nil) (list T Nil)
(cons Nil T) (list Nil T)
(list Nil) (cons T (list Nil))
(cons (T) Nil) (list (T) Nil)
(list '(one two) '(free temp)) (cons '(one two) '(free temp))
5. Написать функцию (f ar1 ar2 ar3 ar4) -> ((ar1 ar2) (ar3 ar4)).
Написать функцию (f ar1 ar2) -> ((ar1) (ar2)).
Написать функцию (f ar1) -> (((ar1))).
Представить результаты в виде списочных ячеек.
6. Запишите последовательности вызовов CAR и CDR, выделяющие из
приведенных ниже списков символ «а».
а) (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 а))))))
7. Каково значение каждого из следующих выражений:
(ATOM (CAR (QUOTE ((1 2) 3 4))));
(NULL (CDDR (QUOTE ((5 6) (7 8)))));
(EQUAL (CAR (QUOTE ((7 )))) (CDR (QUOTE (5 7))));
(ZEROP (CADDDR (QUOTE (3 2 1 0))));
8. Проделайте следующие вычисления с помощью интерпретатора Лиспа:
а) 3.234*(45.6+2.43)
б) 55+21.3+1.54*2.5432-32
в) (34-21.5676-43)/(342+32*4.1)
9. Определите значения следующих выражений:
а) ‘(+ 2 (* 3 5))
б) (+ 2 ‘(* 3 5))
в) (+ 2 (’ * 3 5))
г) (+ 2 (* 3 ’5))
д) (quote ‘quote)
е) (quote 6)
Оформление отчета
Отчет по работе должен включать исходные тексты выполненных программ и целями, с которыми они работали, и должен содержать:
Цель работы.
Описание всех заданий с внутренними целями и полученными результатами