(mapcan #'rest (list (list 0 1 2) (cons :a :b)))
=> (1 2 . :b)
... но это правда, что большую часть времени вы можете ожидать, что в результате вы получите правильные последовательности;функции могут быть не указаны по разным причинам (стоимость для разработчиков и т. д.).
Кстати, обратите внимание, что NCONC
указано для возврата списка (по крайней мере, в HyperSpec), но формальное определение, приведенное на той же странице, позволяетперечисляет в результате, например, (nconc nil 2)
равно 2. Это неполное чрезмерное приближение типа результата (в сигнатуре, а не фактическом описании функции) загрязняет все остальные результаты:
(mapcan #'rest (list (list) (cons 1 2)))
=> 2
См.также Предлагаемые изменения ANSI и Разъяснения и ошибки ANSI .