gpt4 book ai didi

recursion - 以下递归函数的非递归函数是什么?

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

(defun filter-numbers-rec (inlist)
"This function filters out non-numbers from its input list and returns
the result, a list of numbers"
(cond
((not (listp inlist))
(princ "Argument must be a list")
(terpri)
())
((null inlist)
())
((not (numberp (car inlist)))
(filter-numbers-rec (cdr inlist)))
(t
(cons (car inlist)
(filter-numbers-rec (cdr inlist))))))

最佳答案

嗯,函数的描述是你想删除列表中的每一个东西如果不是号码,所以这里的一个很好的候选人是 remove-if-not ,您将按如下方式使用:

(remove-if-not 'numberp '(1 a 2 b 3 c #\x (y 4)))
;=> (1 2 3)

如果出于某种原因,您想以(可能)不使用递归的方式编写此代码,则可以使用 do :

(do ((list '(1 a 2 b 3 c #\x (y 4)) (rest list))
(result '()))
((endp list) (nreverse result))
(when (numberp (car list))
(push (car list) result)))
;=> (1 2 3)

如果你不喜欢do的冗长,你可以使用loop:

(loop :for x :in '(1 a 2 b 3 c #\x (y 4))
:when (numberp x)
:collect x)
;=> (1 2 3)

关于recursion - 以下递归函数的非递归函数是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21793232/

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