Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Functional programming 计算列表中的原子和列表_Functional Programming_Lisp_Common Lisp - Fatal编程技术网

Functional programming 计算列表中的原子和列表

Functional 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

我试图写一个函数来计算列表上层的原子数。例如,如果我有a
”(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))))))