Общая информацияВ 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))