我试图在列表中的搜索原子之后添加一个新原子。
当我尝试递归调用函数appendConst时,我收到以下错误 -
[1]> (defun appendConst (OLD NEW L)
(cond
((null L) ())
((EQ (car L) OLD) (appendConst (cons OLD (cons NEW (cdr L)))) )
(T (cons (car L) (appendConst OLD NEW (cdr L))))
))
APPENDCONST
[2]> (appendConst 'a 'd '(a c d e a m k))
*** - EVAL/APPLY: Too few arguments (1 instead of at least 3) given to APPENDCONST
The following restarts are available:
ABORT :R1 Abort main loop
Break 1 [3]>
在这里,使用我的输入,在每次出现'a'之后,我想在给定的整个列表中添加'd'。
我是新手,如何在这里递归调用函数?
TIA。
答案 0 :(得分:1)
你的第一个递归调用(你添加NEW
)确实只有一个错误所说的参数。只添加丢失的OLD
和NEW
将无效,因为递归调用会再次找到OLD
。所以,就像在你的另一个案例中一样,在电话会议之外进行处理:
(cons OLD (cons NEW (appendConst OLD NEW (cdr L))))
请注意,这两种情况都不是尾递归的:要避免堆栈使用与列表长度成比例,您必须修改列表或执行更复杂的操作,例如传递新列表的头部和尾部在递归时。