Общая информацияВ 1 семестре 2009-2010 учебного года на практических занятих по спецкурсу кафедры систем информатики «Парадигмы программирования» изучается язык LISP. В связи с большим количеством студентов в группе занимаемся по принципу «пришёл, сдал, ушёл» (либо приходим со своим ноутбуком, на котором установлен Common LISP). О занятиях, на которых будет рассказываться теория, я буду сообщать заранее. Время и место: четверг, 17:45, ауд. 309 СК НГУ. Преподаватель: Александр Геннадьевич Фенстер, fenster@fenster.name, +7 913 9053295. Рекомендуемая литература:
|
Таблица результатов
Гистограмма |
LENGTH1, которая
возвращает длину списка:> (LENGTH1 '(A B C))
3
Функция с именем LENGTH является
стандартной, поэтому ваша функция может называться LENGTH1 или
как-то иначе. То же самое верно для следующих заданий, в которых
имя функции содержит единицу.
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))