LISP - 每次出现搜索原子后的原子
LISP - atom after every occurrence of search atom
我正在尝试在列表中的搜索原子之后添加一个新原子。
当我尝试递归调用函数 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。
你的第一个递归调用(你添加 NEW
的地方)实际上只有错误所说的一个参数。仅仅添加缺失的 OLD
和 NEW
是行不通的,因为递归调用会再次找到 OLD
。因此,就像您的其他情况一样,只需在通话之外进行操作即可:
(cons OLD (cons NEW (appendConst OLD NEW (cdr L))))
请注意,这两种情况都不是尾递归的:为了避免堆栈使用与列表的长度成比例,您必须就地修改列表或做一些更复杂的事情,比如传递递归时的新列表。
我正在尝试在列表中的搜索原子之后添加一个新原子。
当我尝试递归调用函数 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。
你的第一个递归调用(你添加 NEW
的地方)实际上只有错误所说的一个参数。仅仅添加缺失的 OLD
和 NEW
是行不通的,因为递归调用会再次找到 OLD
。因此,就像您的其他情况一样,只需在通话之外进行操作即可:
(cons OLD (cons NEW (appendConst OLD NEW (cdr L))))
请注意,这两种情况都不是尾递归的:为了避免堆栈使用与列表的长度成比例,您必须就地修改列表或做一些更复杂的事情,比如传递递归时的新列表。