Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Контрольная работа (варианты 3 и 5) / Контрольная работа (вариант 5)

.docx
Скачиваний:
10
Добавлен:
28.06.2014
Размер:
14.81 Кб
Скачать

Контрольная работа.

Вариант № 5.

1. Определить предикат, возвращающий T, если все элементы линейного списка – символьные атомы, иначе – NIL.

(DEFUN F1 (L)

(COND ((NULL L) T)

((SYMBOLP (CAR L)) (F1 (CDR L)))

(T NIL)

)

)

пример

(F1 '(a b c d e)) => T

(F1 '(a b c 3 e)) => NIL

2. Посчитать число всех положительных числовых атомов в списке произвольной структуры.

(DEFUN F2 (L)

(COND ((NULL L) 0)

((LISTP (CAR L)) (+ (F2 (CAR L)) (F2 (CDR L))))

((AND (NUMBERP (CAR L)) (PLUSP (CAR L))) (+ 1 (F2 (CDR L))))

(T (F2 (CDR L)))

)

)

пример

(F2 '(a -2 1 (2 4 a d (3 -1 s) d 2) 3)) => 6

(F2 '(b -2 -6 -4 (-2 -4 x y d -2) -3)) => 0

3. В список произвольной структуры добавить перед элементом X его номер 1,2,3...

(DEFUN F3 (L X)

(F3_1 L X '() 1)

)

(DEFUN F3_1 (L X P I)

(COND ((NULL L) P)

((LISTP (CAR L)) (APPEND

P

(LIST (F3_1 (CAR L) X '() I))

(F3_1 (CDR L) X '() (+ I (F3_2 (CAR L) X)))

)

)

((EQ X (CAR L)) (F3_1 (CDR L) X (APPEND P (LIST I (CAR L))) (+ I 1)))

(T (F3_1 (CDR L) X (APPEND P (LIST (CAR L))) I))

)

)

; Подсчёт числа вхождений элемента X в список L

(DEFUN F3_2 (L X)

(COND ((NULL L) 0)

((LISTP (CAR L)) (+ (F3_2 (CAR L) X) (F3_2 (CDR L) X)))

((EQ X (CAR L)) (+ 1 (F3_2 (CDR L) X)))

(T (F3_2 (CDR L) X))

)

)

пример

(F3 '(A B C A B C A B C) A) => (1 A B C 2 A B C 3 A B C)

(F3 '(A B (C A (B C A) B) C) B) => (A 1 B (C A (2 B C A) 3 B) C)

4. Отсортировать линейный числовой список.

(DEFUN F4 (L)

(COND ((EQ (LENGTH (CAR (SPLIT L))) 1) (MERGE (CAR (SPLIT L)) (CAR (CDR (SPLIT L)))))

(T (MERGE (F4 (CAR (SPLIT L))) (F4 (CAR (CDR (SPLIT L))))))

)

)

(DEFUN FIRST_EL (N L)

(COND ((OR (<= N 0) (NULL L)) NIL)

(T (CONS (CAR L) (FIRST_EL (- N 1) (CDR L))))

)

)

(DEFUN LAST_EL (N L)

(COND ((<= N 0) L)

((NULL L) NIL)

(T (LAST_EL (- N 1) (CDR L)))

)

)

(DEFUN SPLIT (L)

(SET 'A1 (FIRST_EL (/ (LENGTH L) 2) L))

(SET 'A2 (LAST_EL (LENGTH A1) L))

(LIST A1 A2)

)

(DEFUN MERGE (L1 L2)

(COND ((NULL L1) L2)

((NULL L2) L1)

((> (CAR L1) (CAR L2)) (CONS (CAR L2) (MERGE L1 (CDR L2))))

(T (CONS (CAR L1) (MERGE (CDR L1) L2)))

)

)

пример

(F4 '(1 4 2 3 5 8 7 4 3 2 7 5)) => (1 2 2 3 3 4 4 5 5 7 7 8)