我今天刚开始学习 LISP 只是为了了解它,所以我对它完全陌生。不过,我确实有其他语言的经验。我试图编写一个函数,它完全按原样返回一个列表,除了没有最后一个元素。
虽然我打算重写这个函数,因为我确信有一种更简单的方法,但我的版本产生了一些非常不寻常的输出。作为记录,我使用的是 CLISP 环境。
(defun my-butlast (L)
(if (null (rest L))
nil
(if (eq nil (my-butlast (rest L)))
(first L)
(cons (first L) (my-butlast (rest L)))
)
)
)
(my-butlast '(1 2 3 4 5))
这产生了输出(1 2 3 . 4)
所以我的问题是,这点从何而来?
另外,如果我尝试运行,(length (my-butlast '(1 2 3 4)))
我会得到一个神秘的错误:正确的列表不能以 4 结尾。这是什么意思?