小编Hap*_*oco的帖子

使用递归时如何计算一个列表(或嵌套列表的列表)中的所有原子

我正在创建一个递归函数,用于计算列表中的原子数。它应该能够计算嵌套列表的原子数。例如:(a(bc)ed)或(a(bc(ge))ed),应分别计算b和c或分别计算b,c,e和d而不是整体。

这是我创建的功能:

(defun  count-atoms (mylist)
    (cond
    ((null mylist) 0)
    ((listp (car mylist)) (count-atoms (car mylist)))
    ((atom (car mylist)) (+ 1 (count-atoms (rest mylist))))
    )
)
Run Code Online (Sandbox Code Playgroud)

我得到的输出是3,但应该是5(基于(a(bc)ed))。我猜想函数到达c时就停止了。如何使函数不止于c并返回最外层列表。

lisp recursion common-lisp

0
推荐指数
1
解决办法
70
查看次数

标签 统计

common-lisp ×1

lisp ×1

recursion ×1