Реферат на тему:
Функції відбору
1. (CAR list), (CDR list). Ці функції відбору (селекторні функції) є
примітивними функціями, та були розглянуті раніше. Також було показано
як утворити похідні від них функції типу CXXXXR, де X ? {A, D, ?}, при
чому між літерами C та R знаходиться хоча б одна літера A чи D.
2. (LAST list) повертає останній на верхньому рівні cons списку list.
Відмітимо, що LAST повертає останній cons, але не останній елемент
списку. Якщо список є атом, LAST повертає NIL. Останній елемент можна
отримати використанням функції CAR від (LAST list).
(DEFUN LAST (LST)
((ATOM LST) NIL)
((ATOM (CDR LST)) LST)
(LAST (CDR LST)) )
$ (LAST ‘(A B C D)) $ (LAST ‘FCO)
(D) NIL
$ (LAST ‘(A B C . D)) $ (CAR (LAST ‘(A B C)))
(C . D) C
3. (NTHCDR n list). Якщо n – ноль або додатне ціле, функція повертає
n-й CDR списку list. NTHCDR повертає NIL, якщо n не є ані 0, ані
додатне ціле, або якщо список list має n або меньш елементів.
(DEFUN NTHCDR (N LST)
((ZEROP N) LST)
((AND (INTEGERP N) (PLUSP N))
((ATOM LST) NIL)
(NTHCDR (SUB1 N) (CDR LST)) ) )
$ (NTHCDR 0 ‘(A B C D)) $ (NTHCDR 5 ‘(A B C D))
(A B C D) NIL
$ (NTHCDR 1 ‘(A B C D)) $ (NTHCDR 2 ‘(A B . C))
(B C D) C
$ (NTHCDR 2 ‘(A B C D))
(C D)
4. (NTH n list). Якщо n – ноль або додатне ціле, функція повертає n-й
елемент списку list, де CAR списку – нульовий елемент. NTH повертає
NIL, якщо n не є ані 0, ані додатне ціле, або якщо список має n або
меньш елементів.
(DEFUN NTH (N LST)
((ATOM (NTHCDR N LST)) NIL)
(CAR (NTHCDR N LST)) )
$ (NTH 0 ‘(A B C D)) $ (NTH 4 ‘(A B C D))
A NIL
$ (NTH 3 ‘(A B C D)) $ (NTH 2 ‘(A B . C))
D NIL
5. (SUBLIST list n m). Якщо n та m – невід’ємні цілі та n m, SUBLIST
повертає NIL.
(DEFUN SUBLIST (LST N M)
((INTEGERP N)
((INTEGERP M)
(FIRST (ADD1 (-M N)) (NTHCDR N LST)) )
(NTHCDR N LST) ) )
$ (SUBLIST ‘(A B C D E F) 2 4) $ (SUBLIST ‘(A B C D E F) 0 3)
(C D E) (A B C D)
$ (SUBLIST ‘(A B C D E F) 2 2) $ (SUBLIST ‘(A B C D E F) 2)
(C) (C D E F)
6. (COUNT object list test). Повертає кількість елементів у списку
list, для яких ознака при порівнянні з об’єктом object за тестом test
не дорівнює NIL. Якщо тест – аргумент не задано або дорівнює NIL, COUNT
використовує EQL – тест.
(COUNT-IF test list). Повертає кількість елементів у списку list, для
яких ознака перевірки за тестом не дорівнює NIL.
(DEFUN COUNT1 (OBJ LST TEST)
(count-aux OBJ LST TEST 0) )
(DEFUN count-aux (OBJ LST TEST COUNTER)
((ATOM LST) COUNTER)
( ((NULL TEST)
(SETQ TEST ‘EQL) ) )
((FUNCALL TEST OBJ (CAR LST))
(count-aux OBJ (CDR LST) TEST (ADD1 COUNTER)) )
(count-aux OBJ (CDR LST) TEST COUNTER) )
$ (COUNT ‘DOG ‘(CAT DOG COW PIG DOG ANT))
2
$ (COUNT ‘5 ‘(4 5 6 7 8)
Нашли опечатку? Выделите и нажмите CTRL+Enter