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

Recursion 以下递归函数的非递归函数是什么?,recursion,lisp,Recursion,Lisp,这个函数的作用是,如果它不是一个数字,那么你想从列表中删除它,因此这里有一个很好的候选者,你可以使用它,如下所示: (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 "Argume

这个函数的作用是,如果它不是一个数字,那么你想从列表中删除它,因此这里有一个很好的候选者,你可以使用它,如下所示:

(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))))))
如果出于某种原因,您希望以(可能)不使用递归的方式编写此文件,则可以使用:

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

(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)

这个函数的作用是,如果它不是一个数字,那么你想从列表中删除它,因此这里有一个很好的候选者,你可以使用它,如下所示:

(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))))))
如果出于某种原因,您希望以(可能)不使用递归的方式编写此文件,则可以使用:

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

(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)

这个函数的作用是,如果它不是一个数字,那么你想从列表中删除它,因此这里有一个很好的候选者,你可以使用它,如下所示:

(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))))))
如果出于某种原因,您希望以(可能)不使用递归的方式编写此文件,则可以使用:

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

(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)

这个函数的作用是,如果它不是一个数字,那么你想从列表中删除它,因此这里有一个很好的候选者,你可以使用它,如下所示:

(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))))))
如果出于某种原因,您希望以(可能)不使用递归的方式编写此文件,则可以使用:

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

(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)