1

リスト内の特定のアトムのすべての出現をカウントする関数を作成する必要があります。これは私が持っているものです:

(defun my-count (a L)
    (cond
    ((null L) nil)
    ((equal a (car L))(+ 1 (my-count a (cdr L))))
    (t (my-count a(cdr L)))
    )
)

私の理解では、これはうまくいくはずです。しかし、トレースを実行すると、(equals a car L) が true と評価されると、再帰呼び出しが行われますが、+ 1 が初期化されないことがわかります。明らかに何かが欠けています。

4

1 に答える 1

3

問題はあなたのヌル条件です。あなたは再帰的な追加を行っています。完了したら、nil ではなく 0 を追加する必要があります。

(defun my-count (a L)
  (cond
   ((null L) 0)
   ((equal a (car L)) (+ 1 (my-count a (cdr L))))
   (t (my-count a (cdr L)))))

そのような

? (my-count 'x '(a x b))
1
? (my-count 'x '(a x  x b))
2
? (my-count 'x '(a b))
0
于 2013-09-21T21:54:45.630 に答える