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

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

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

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

Вариант № 3.

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

(DEFUN F1 (L)

(COND ((NULL L) T)

((NUMBERP (CAR L)) (F1 (CDR L)))

(T NIL)

)

)

пример

(F1 '(1 2 3 4 5)) => T

(F1 '(1 2 3 A 5)) => NIL

2. Определить предикат, подсчитывающий количество подсписков на всех уровнях в списке произвольной структуры.

(DEFUN F2 (L)

(COND ((NULL L) 0)

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

(T (F2 (CDR L)))

)

)

пример

(F2 '(A B 4 3)) => 0

(F2 '(A B C (D E (F G) (H I J)) (K L M) N)) => 4

3. Определить функцию, которая определяет позиции, в которых Х является элементом списка L, и выдаёт номера этих позиций в виде списка.

(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

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

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

)

)

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

(T (F3_1 (CDR L) X P (+ I 1)))

)

)

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

(DEFUN F3_2 (L)

(COND ((NULL L) 0)

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

(T (+ 1 (F3_2 (CDR L))))

)

)

пример

(F3 '(A B C A B C A B C) A) => (1 4 7 10)

(F3 '(A B (C A (B C A) B) C) B) => (1 4 7 10)

4. Определить функцию, которая в списке произвольной структуры ищет символьный атом, имеющий наибольшее число вхождений заданной буквы.

(DEFUN F4 (L X)

(F4_1 (CDR L) X (CAR L))

)

(DEFUN F4_1 (L X MAX)

(COND ((NULL L) MAX)

((LISTP (CAR L)) (IF (> (F4_2 (F4_1 (CAR L) X (CAAR L)) X) (F4_2 MAX X))

(F4_1 (CDR L) X (F4_1 (CAR L) X (CAAR L)))

(F4_1 (CDR L) X MAX)

)

)

((> (F4_2 (CAR L) X) (F4_2 MAX X)) (F4_1 (CDR L) (CAR L)))

(T (F4_1 (CDR L) MAX))

)

)

; Подсчёт числа вхождений буквы в атом

(DEFUN F4_1 (A X)

(SETQ N 0)

(SETQ L (UNPACK A))

(LOOP

((NULL L) N)

(IF (EQ (CAR L) X) (SETQ N (+ N 1)))

(SETQ L (CDR L))

)

)

пример

(F4 '(aabba baaabba aba cbcbc) a) => baaabba

(F4 '(aabba (baaabba (cbcc bbbbb) aba) cbcbc) b) => bbbbb