gpt4 book ai didi

LISP - 每次出现搜索原子后的原子

转载 作者:太空宇宙 更新时间:2023-11-03 18:54:24 25 4
gpt4 key购买 nike

我正在尝试在列表中的搜索原子之后添加一个新原子。

当我尝试递归调用函数 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 的地方)实际上只有错误所说的一个参数。仅添加缺少的 OLDNEW 是行不通的,因为递归调用会再次找到 OLD。因此,就像您的其他情况一样,只需在通话之外进行操作即可:

(cons OLD (cons NEW (appendConst OLD NEW (cdr L))))

请注意,这两种情况都不是尾递归的:为了避免堆栈使用与列表的长度成比例,您必须就地修改列表或做一些更复杂的事情,比如传递新列表的头和尾递归时。

关于LISP - 每次出现搜索原子后的原子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48134454/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com