Когда вы говорите
> (cons 'a 'b)
в общем lisp, вы получаете не список, а пару с точками: (a . b)
, тогда как результат
> (cons 'a (cons 'b nil))
- это пара с точками (a . ( b . nil))
.
В первом списке cdr()
этого не является списком, поскольку он здесь b
, а не nil
, что делает его неправильным списком.Правильные списки должны заканчиваться nil
.Поэтому функции более высокого порядка, такие как mapcar()
, и друзья не будут работать, но мы сохраняем cons-ячейку.Я предполагаю, что дизайнеры Clojure удалили эту функцию из-за путаницы, которую она могла вызвать.