Назад
Парадигмы программирования
Практика
Список семестровых заданий («лабораторных работ») по Лиспу
- Списочные структуры. Реализовать функции
LENGTH1
,
REVERSE1
, APPEND1
, LIST1
, определенные следующим
образом:
- функция
LENGTH1
возвращает длину списка:
> (LENGTH1 '(A B C))
3
- функция
LIST1
объединяет два аргумента в список:
> (LIST1 'A 'B)
(A B)
- функция
APPEND1
объединяет два списка:
> (APPEND1 '(A B) '(C D))
(A B C D)
- функция
REVERSE1
«переворачивает»
список:
> (REVERSE1 '(A B C))
(C B A)
- Предикаты сравнения. Объяснить разницу между предикатами сравнения
EQ
, EQL
, =
, EQUAL
, EQUALP
.
Привести примеры S-выражений A
и B
таких, что
- истинно
(EQ A B)
;
- истинно
(EQL A B)
, но ложно (EQ A B)
;
- истинно
(= A B)
, но ложно (EQL A B)
;
- истинно
(EQUAL A B)
, но ложно (EQL A B)
;
- истинно
(EQUALP A B)
, но ложно (EQUAL A B)
;
- ложно
(EQUALP A B)
.
- Ассоциативный список. Реализовать функцию
ASSOC1
,
которая определяет, есть ли в данном списке точечных пар пара с
первым элементом, равным данному атому, и возвращающую второй элемент
этой пары, если такая пара есть, и NIL, если такой пары нет.
Пример:
> (ASSOC1 '((A . 1) (B . 2) (C . 3)) 'B)
2
> (ASSOC1 '((A . 1) (B . 2) (C . 3)) 'D)
NIL
- Сортировка. Дан список из нескольких чисел. Реализовать функцию
сортировки этого списка по возрастанию любым способом.
Пример:
> (SORT '(1 5 2 4 3))
(1 2 3 4 5)
- Слияние. Реализовать функцию, «сливающую» два списка чисел,
отсортированных по возрастанию, в один список, отсортированный по возрастанию.
Пример:
> (MERGE '(1 3 5) '(2 4))
(1 2 3 4 5)
- Суперпозиция
CAR
и CDR
. Реализовать функцию
MAKE-CAR-CDR
, которая принимает три аргумента:
S
— произвольное S-выражение
X
— произвольный атом
Q
— произвольный атом
и возвращает S-выражение из атомов CAR
, CDR
и
Q
, такое, что если бы значением атома Q
было
S
, то результатом вычисления этого выражения был бы атом X
.
Проще говоря, функция должна показывать, как при помощи суперпозиции вызовов
CAR
и CDR
«выделить» X
из выражения S
, обозначенного как Q
.
Пример:
> (MAKE-CAR-CDR '(A X B) 'X 'Q)
(CAR (CDR Q))
- Перестановки. Вывести все возможные перестановки элементов данного списка
в произвольном порядке. В приведенном ниже примере перестановки выведены на экран, а
NIL
— результат функции. Ваша функция может работать иначе.
Пример:
> (PERMUT '(1 2 3))
(1 2 3)
(1 3 2)
(2 1 3)
(2 3 1)
(3 1 2)
(3 2 1)
NIL
- Индивидуальные задания будут выданы на занятиях после сдачи всех предыдущих заданий.