Functional programming 计算列表中的原子和列表
我试图写一个函数来计算列表上层的原子数。例如,如果我有aFunctional programming 计算列表中的原子和列表,functional-programming,lisp,common-lisp,Functional Programming,Lisp,Common Lisp,我试图写一个函数来计算列表上层的原子数。例如,如果我有a”(ab((a)c)e),它应该返回3,这意味着在更高的能级中有3个原子 我还想做一个函数,计算列表中子列表的数量。第二个函数应该从上到下的每个级别进行计数。如果我们有”(a((b)s)),则如果子列表位于上层,则应返回1;如果函数从上层到下层或列表的任何一层计数,则应返回2 我下面的代码计算列表中的原子数,这是我不想要的。我怎样才能修好它? 如何编写其他函数的代码 (defun count-atoms(L) (cond ((n
”(ab((a)c)e)
,它应该返回3,这意味着在更高的能级中有3个原子
我还想做一个函数,计算列表中子列表的数量。第二个函数应该从上到下的每个级别进行计数。如果我们有”(a((b)s))
,则如果子列表位于上层,则应返回1;如果函数从上层到下层或列表的任何一层计数,则应返回2
我下面的代码计算列表中的原子数,这是我不想要的。我怎样才能修好它?
如何编写其他函数的代码
(defun count-atoms(L)
(cond
((null l) 0)
((atom l) 1)
(t (+ (count-atoms (car l))
(count-atoms (cdr l))))))
如果我运行上面的代码,假设
(count-atoms '(a b ((a) c) e))
它给我5。您的代码递归地查看每个
(车l)
,直到它成为一个原子,所以每个项目都被计数
这应该起作用:
(defun count-atoms(l)
(cond
((null l) 0)
(t (+ (cond
((atom (car l)) 1)
(t 0))
(count-atoms (cdr l))))))