Вывод (обобщенной) последовательности из правильной последовательности - PullRequest
2 голосов
/ 22 мая 2019

Ряд функций последовательности Common Lisp принимает правильную последовательность в качестве входа и возвращает последовательность в качестве выхода. Начиная с правильной последовательности , как функция может не возвращать другую правильную последовательность ? Пример?

1 Ответ

3 голосов
/ 23 мая 2019
(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 .

...