递归函数 lisp return 列表
recursive function lisp return list
我知道这是一个新手问题我提前道歉。我正在编写一个递归函数,它 return 是给定列表中 'o 的数量
(defun garde-o (liste)
(cond
((not liste) 0)
((equal (car liste) 'o) (+ 1 (garde-o(cdr liste))) )
((garde-o(cdr liste)) )
)
)
而不是 return 我想 return 给定的列表只有 'o.
像那样:
(garde-o '(a o x & w o o))
应该return=>(o o o)
我不想使用 pop
、push
、set
...只是我找不到 return 这个。
请注意,给定出现次数,例如 10,您可以简单地执行
(make-list 10 :initial-element 'o)
或等同于
(loop repeat 10 collect 'o)
要计算列表中的 'o,您可以这样做
(count 'o '(a b c o p o a z))
因此,您的函数的一个简单解决方案是
(defun garde-o (a)
(make-list (count 'o a) :initial-element 'o))
但是,您也可以递归地执行此操作
(defun garde-o (a)
(cond ((null a) nil)
((eq (car a) 'o) (cons 'o (garde-o (cdr a))))
(t (garde-o (cdr a)))))
和非递归
(defun garde-o (a)
(loop for x in a when (eq x 'o) collect x))
我知道这是一个新手问题我提前道歉。我正在编写一个递归函数,它 return 是给定列表中 'o 的数量
(defun garde-o (liste)
(cond
((not liste) 0)
((equal (car liste) 'o) (+ 1 (garde-o(cdr liste))) )
((garde-o(cdr liste)) )
)
)
而不是 return 我想 return 给定的列表只有 'o.
像那样:
(garde-o '(a o x & w o o))
应该return=>(o o o)
我不想使用 pop
、push
、set
...只是我找不到 return 这个。
请注意,给定出现次数,例如 10,您可以简单地执行
(make-list 10 :initial-element 'o)
或等同于
(loop repeat 10 collect 'o)
要计算列表中的 'o,您可以这样做
(count 'o '(a b c o p o a z))
因此,您的函数的一个简单解决方案是
(defun garde-o (a)
(make-list (count 'o a) :initial-element 'o))
但是,您也可以递归地执行此操作
(defun garde-o (a)
(cond ((null a) nil)
((eq (car a) 'o) (cons 'o (garde-o (cdr a))))
(t (garde-o (cdr a)))))
和非递归
(defun garde-o (a)
(loop for x in a when (eq x 'o) collect x))