-1

リストの上位レベルにある原子の数を計算する関数を作成しようとしています。たとえば、があれば、 '(a b ((a) c) e)3を返す必要があります。これは、上位レベルに3つのアトムがあることを意味します。

また、リスト内のサブリストの数をカウントする関数を作成したいと思います。2番目の関数は、上下のすべてのレベルからカウントする必要があります。がある場合'(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 に答える