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

Методичні вказівки

Основні принципи конструювання списків

При виконанні завдання необхідно використовувати лише базові функції обробки списків: селектори CAR i CDR, додаткові селектори та конструктор CONS. Таке обмеження потрібно для більш глибокого засвоєння способів обробки списків, що необхідно для успішного виконання інших робіт.

Слід звернути увагу на те, що при створенні списку конструктор додає голову до хвоста, тобто створення списку починається з останнього елементу і поступово додаються нові елементи в голову списку. Наприклад, необхідно з атомів A, B і списку (C D) створити список (B (C D) A)

Процес створення списку представимо з наступних кроків:

  1. додавання атому A до пустого списку – створення списку (A);

  2. додавання списку (C D) до списку (A) – створення списку ((C D) A)

  3. додавання атому B до списку ((C D) A) – створення списку (B (C D) A)

При виконанні завдання процес конструювання нового списку супроводжується вибором атомів з вхідного списку. Для вибору атомів слід використовувати наступні функції – селектори:

CAR перший атом

CADR другий атом

CADDR третій атом

CADDDR четвертий атом

CDDDDR хвіст, починаючи з п’ятого атому.

Таким чином, для одержання п’ятого елементу списку необхідно отримати хвіст, починаючи з п’ятого елементу, а потім одержати голову списку.

Приклад виконання завдання

Перетворити список (a b c d e) у список ((b c d) (e . a))

Рішення:

Список, який потрібно створити, складається з двох елементів – список ((b c d) і список (e . a). Виклик конструктора у даному випадку має вигляд:

(CONS <вираз1> <вираз2>),

де:

<вираз1> - вираз для створення списку (b c d) – голова списку;

<вираз2> - вираз для створення списку ((e . a)) – хвіст списку.

Припускаючи, що X – вхідний список, розглянемо кроки процесу конструювання списку ((e . a)).

  1. Отримання атому А – (car X);

  2. Отримання атому Е – (car (cddddr X));

  3. Створення крапкової пари – (cons (car (cddddr X)) (car X))

  4. Створення списку ((e . a)) – (cons (cons (car (cddddr X)) (car X)) nil)

Запишемо вираз для створення списку (b c d):

(cons (cadr X) (cons (caddr X) (cons (cadddr X) nil)))

Остаточно запишемо лямбда-виклик для перетворення списку:

( ; початкова відкрита дужка лямбда-виклику

(lambda (X) ;початок визначення лямбда-виразу

(cons ;конструктор списку ((b c d) (e . a))

; конструктор списку (b c d)

(cons (cadr X) (cons (caddr X) (cons (cadddr X) nil)))

; конструктор списку ((e . a))

(cons (cons (car (cddddr X)) (car X)) nil)

)) ; кінцева дужка лямбда-виразу

‘(a b c d e) ; фактичний параметр

) ; кінцева дужка лямбда-виклику

Контрольні запитання

  1. Визначення списку.

  2. Визначення символьного та числового атомів

  3. Визначення лямбда-виразу

  4. Визначення лямбда-виклику

  5. Чим відрізняються формальні та фактичні параметри функції?

  6. Функції – селектори

  7. Функції конструювання списків

1 У мові Lisp поняття «знак» замінює поняття «символ» в інших мовах програмування у зв’язку с тим, що у мові Lisp слово «символ» використовується як назва символьного атому.

10

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]