В 1 семестре 2008-2009 учебного года на практических занятих по обязательному спецкурсу «Парадигмы программирования» изучался язык LISP.
Преподаватель: Александр Геннадьевич Фенстер, fenster@fenster.name, +7 913 9053295.
Рекомендуемая литература: Э. Хювёнен, Й. Сеппянен «Мир Лиспа».
То же самое в сети НГУ: раз, два.
Курсы лекций Л.В.Городней на intuit.ru: Функциональное программирование,
Парадигмы программирования,
Введение в программирование на Лиспе.
# | Фамилия, имя | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | Итого |
|
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Афонина Алиса | ||||||||||||||||||
Батурин Алексей | ||||||||||||||||||
Должикова Анастасия | ||||||||||||||||||
Зайков Александр | ||||||||||||||||||
Исаев Валерий | ||||||||||||||||||
Кременная Ольга | ||||||||||||||||||
Кузькоков Владислав | ||||||||||||||||||
Ломакин Сергей | ||||||||||||||||||
Лысяк Александр | ||||||||||||||||||
Носова Дарья | ||||||||||||||||||
Полушкин Михаил | ||||||||||||||||||
Сорокин Роман | ||||||||||||||||||
Тищенко Николай | ||||||||||||||||||
Часовщикова Анна |
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)
> (MERGE1 '(1 3 5) '(2 4))
(1 2 3 4 5)
> (SORT1 '(1 5 2 4 3))
(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))
> (PERMUT '(1 2 3))
((1 2 3) (1 3 2) (2 1 3) (2 3 1) (3 1 2) (3 2 1))