Задание на лабораторную работу. 1. Записать и вычислить s-выражения для следующих формул:

1. Записать и вычислить s-выражения для следующих формул:

1)

2) (3 * 17) + (4 * 19)

3)

2. Построить диаграммы списочных ячеек для выражений:

1) (+ 3 5)

2) (x (a b (c)))

3) (((nil)))

3. Вычисление выражения (caadr (cadr ’(a ’(b (c))))) вернет результат b. Если же мы вычислим вторую часть этого выражения, то есть (cadr ’(a ’(b (c)))), то получим ’(b (c)). Вычисление же (caadr ’(b (c))) даст в результате c. Необходимо объяснить, почему так получается.

Контрольные вопросы

1. Что называется s-выражением?

2. Напишите s-выражение, вычисляющее среднее арифметическое чисел 23, 5, 43 и 17.

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

1) ’( + 2 (* 3 4))

2) (+ 2 ’(* 3 4))

3) (+ 2 (’* 3 4))

4) (+ 2 (* 3 ’4))

5) (quote ’quote)

6) (quote 2)

7) ’(quote NIL)

4. Назовите базовые функции языка Лисп для работы со списками.

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

1) (1 2 цель 3 4)

2) ((1) (2 цель) (3 (4)))

3) ((1 (2 (3 4 цель))))

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

1) (cons nil ’(1 2 3))

2) (cons nil nil)

3) (cons ’(nil) ’(nil))

4) (cons (car ’(a b)) (cdr ’(a b)))

5) (car ’(car ( a b c)))

6) (cdr (car (cdr ’(a b c))))

7) (list (list ’a ’b) ’(car (c d)))

 


Лабораторная работа №5

Рекурсия и итерация в языке Лисп