Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
II вопрос.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
115.2 Кб
Скачать

II вопрос

Ответ на вопрос включает:

  1. Формулировку рекурсивного определения

  2. Программную реализацию на языке lisp

Базовые примитивы обработки списков

  • Функция QUOTE – блокирует вычисление своего аргумента. Аргументом функции QUOTE может быть что угодно – список или атом.

( QUOTE (1 2 3)) или (1 2 3)  результат ' (1 2 3) (1 2 3)  результат

  • Функция CARвозвращает голову непустого списка. Головой непустого списка называют первый элемент этого списка. Для пустого списка понятие головы не определено.

(CAR ' (1 2 3)) 1 результат

(CAR ' ((1) (2) (3))) (1)  результат

*Большинство функций вычисляет свои аргументы, поэтому блокируем аргумент-список.

  • Функция CDR – возвращает хвост непустого списка. Хвост — это часть списка, без первого элемента, т.е. без головы. Результатом функции CDR всегда является список. CDR возвращает пустой список в том случае, если ее аргумент является одноэлементным списком. Для пустого списка значение функции CDR не определено.

(CDR '(1 2 3))

(2 3)

(CDR '(1 (23)))

((2 3))

(CDR ' ( ( (1) )) )

NIL

  • Функция CONS -создает новый список из элемента и другого списка путем добавления этого элемента в голову указанного списка. Второй аргумент должен быть списком, первый — чем угодно. Результатом функции CONS является список.

(CONS 1 ' (2 3))

(1 2 3)

(CONS ' (1) ' (2 3) )

((1) 2 3)

(CONS 1 NIL)

(1)

Логические функции

  • NULL - возвращает значение T, если ее аргумент является пустым списком, и NIL в противном случае. Под "противным случаем" понимается, что аргумент может быть непустым списком или вообще не списком — атомом (NULL NIL)

(NULL '(1 2 3))

NIL

  • COND- условный оператор в Лиспе. Функция COND, в общем виде, записывается следующим образом:

( COND

((УСЛОВИЕ _1) последовательность_выражений_1) ((УСЛОВИЕ_2) последовательность_выражений_2) ((УСЛОВИЕ_n) последовательность_выражений_n) )

В ней последовательно вычисляются значения условных выражений в порядке их следования до тех пор, пока не встречается истинное выражение. Как только истинное выражение найдено, дальнейший перебор прекращается и вычисляется последовательность выражений, соответствующих этому условию. Последнее вычисленное значение возвращается в качестве значения функции COND. В том случае, если ни одно из условий не выполняется, в качестве значения функции COND возвращается NIL .

Определение собственных функций

(DEFUN имя_функции(аргументы)

(Тело_функции)

)

  1. На Лиспе решить задачу переворачивания данного списка.

Определение: СПИСОК, ОБРАТНЫЙ ДАННОМУ, - это

  • сам этот список, если список пуст;

  • сам этот список, если список состоит из одного элемента;

  • в противном случае, это последний элемент данного, добавленный в качестве головы к перевернутому началу данного списка.

*Понадобятся две функции: последний элемент и начало непустого списка.

(DEFUN MY_LAST (L)

(COND

((NULL (CDR L)) (CAR L))

(Т (MY_LAST (CDR L)))

)

)

(DEFUN MY_BEGIN (L)

(COND

((NULL (CDR L)) NIL)

(T (CONS (CAR L) (MY_BEGIN (CDR L))))

)

)

(DEFUN MY_REVERS (L)

(COND

((NULL L) L)

((NULL (CDR L)) L)

(T (CONS (MY_LAST L) (MY_REVERS (MY_BEGIN L))))

)

)