-1

我正在尝试编写一个函数来计算列表上层的原子数。例如,如果我有一个 '(a b ((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。

4

1 回答 1

1

您的代码递归地查看每一个(car l),直到它是一个原子,所以每个项目都被计算在内。

这应该有效:

(defun count-atoms(l)
  (cond
    ((null l) 0)
    (t (+ (cond
            ((atom (car l)) 1)
            (t 0))
          (count-atoms (cdr l))))))
于 2012-11-18T10:10:22.807 回答