【发布时间】:2019-10-27 22:13:52
【问题描述】:
我在评估此代码以查找错误时失去了理智。我不确定为什么我得到一个未定义的函数。有人可以指导我理解为什么吗?谢谢!
O 应该是一个对象,而 L 应该是一个列表。我正在尝试将 O 附加到列表的末尾并返回列表
(defun my_attach(O L)
(cond ((eq L nil )
O )
(t (cons (car L) (my-attach O (cdr L)) )
)
)
)
【问题讨论】:
-
(eq x nil)通常写成(null x)或(not x)。这些是等价的。null通常用于nil表示空列表的情况;not在nil表示布尔值 false 时使用。 -
(cond (x y) (t z))形式的两个子句cond,其中x、y和z都是单个表达式,通常写作(if x y z)。 -
避免在程序中使用
O作为标识符;它可能会被混淆为零。 -
(defun my-attach (oh list) (if (null list) oh (cons (car list) (my-attach oh (cdr list))))) -
如果我们测试列表不为空并交换两个子句,我们可以缩短它:
(defun my-attach (oh list) (if list (cons (car list) (my-attach oh (cdr list))) oh))
标签: recursion syntax lisp common-lisp cons