2013-09-21 115 views
1

我需要編寫一個函數來計算列表中給定原子的所有出現次數。這是我有:計算列表中的所有原子的出現次數? - LISP

(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))) 
    ) 
) 

據我瞭解這應該工作。然而,當我運行跟蹤時,我發現當(等於一輛車L)評估爲真時,它會進行遞歸調用,但不會初始化+1。顯然有一些我錯過了。

回答

3

問題是你的null條件。你是一個遞歸此外,當你做到了,應該加0,不是nil:

(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 
+0

(頻率 'F'(((F)F)FF) ),得到不正確的計數.. –

+0

@MaksimKniazev什麼是'freq'?如果你引用'my-count',它將在平面列表中計算原子,而不是在嵌套列表中(a.k.a.樹)。 – uselpa

+0

我該如何做測試?你能幫我嗎? –