Контрольная работа (варианты 3 и 5) / Контрольная работа (вариант 3)
.docxКонтрольная работа.
Вариант № 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