В 1 семестре 2007-2008 учебного года на практических занятих по обязательному спецкурсу «Парадигмы программирования» изучается язык LISP. Для получения зачёта необходимо сдать все задания из списка, приведённого ниже. Индивидуальное задание выдаётся после сдачи остальных заданий.
Место и время: среда, 19:20, ауд. 309 СК НГУ.
Преподаватель: Александр Геннадьевич Фенстер, fenster@fenster.name
Рекомендуемая литература: Э. Хювёнен, Й. Сеппянен «Мир Лиспа».
Update: выложил то же самое в сети НГУ: раз, два.
Курсы лекций Л.В.Городней на intuit.ru: Функциональное программирование,
Парадигмы программирования,
Введение в программирование на Лиспе.
Результаты: посещаемость, список сданных задач.
LENGTH1
,
LIST1
, APPEND1
, REVERSE1
, определённые следующим
образом:
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
> (ATOMS '((A B) C NIL (D (E F G))))
(A B C NIL D E F G)
> (SORT1 '(1 5 2 4 3))
(1 2 3 4 5)
> (MERGE1 '(1 3 5) '(2 4))
(1 2 3 4 5)
CAR
и CDR
. Реализовать функцию
MAKE-CAR-CDR
, которая принимает три аргумента:
S
— произвольное S-выражениеX
— произвольный атомQ
— произвольный атом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