2015-11-17 74 views
3

我正在開展一個小型個人項目來教我自己的球拍。我目前正在創建一個函數,它接受兩個s表達式,並返回第一個表達式出現在第二個表達式中的次數。找到一個s表達式出現在另一個的頻率

該項目按預期工作,如果我輸入類似1和'(1 2 3 1 2 3)和返回2,但並沒有爲'(1 2)((1 2) 1 2 (1) (2) (1 2))工作應返回2.

這裏是代碼,我到目前爲止

(define (count item lst) 
    (cond ((null? lst) 0) 
     ((= item (car lst)) (+ 1 (count item (cdr lst)))) 
     (else (count item (cdr lst))))) 

回答

3

試試這個:

(define (count item lst) 
    (cond ((null? lst) 0) 
     ((equal? item (car lst)) (+ 1 (count item (cdr lst)))) 
     (else (count item (cdr lst))))) 

記住,=是比較號碼。對於更一般的平等比較,請使用equal?。現在它按預期工作:

(count '(1 2) '((1 2) 1 2 (1) (2) (1 2))) 
=> 2 
+1

非常感謝!我甚至沒有想到= =標誌在球拍中的作用。 – Grehgous

相關問題