Просматривая «Краткий справочник по Common Lisp» Берта Бургемайстера, я наткнулся на tailp
.
Во-первых, я неправильно понял определения этой функции.И я попытался:
(tailp '(3 4 5) '(1 2 3 4 5))
Но он вернул
NIL
CLTL2 говорит, tailp
верно тогда первый аргумент - любой (nthcdr n list)
с существующимn
.
(nthcdr 2 '(1 2 3 4 5))
;; (3 4 5)
Я также пытался:
(tailp '(3 4 5) '(1 2 3 4 5))
;; NIL - and I would expect: T following the definition above.
(tailp '() '(1 2 3 4 5))
;; T
(tailp '5 '(1 2 3 4 . 5))
;; T
Пока я не попытался (а затем понял, tailp
ищет cdr
из l, которые имеют даже тот же адрес.
(defparameter l '(1 2 3 4 5 6))
(tailp (nthcdr 3 l) l)
;; T
Но тогда у меня возник следующий вопрос:
For what such a function is useful at all?
Не будет ли функция более полезной, которая проверяет, является ли подсписок частью alist? (Или выглядиткак часть списка, вместо этого он должен иметь один и тот же адрес?)
Замечание:
Ну ладно, постепенно я начинаю понимать, что, может быть, это что-то вродеeq
для cdr
частей списка ... Вид ... "Любой cdr
- производный от указанного списка eq
до первого аргумента?".
Но, может быть, кто-томожете мне объяснить, в каких ситуациях такой тест очень полезен?