(define (count-dist-elements lst dist-elems count)
(cond ((null? lst) count)
((member (car lst) dist-elems)
(count-dist-elements (cdr lst) dist-elems count))
(else
(count-dist-elements (cdr lst)
(cons (car lst) dist-elems)
(+ 1 count)))))
(count-dist-elements '(a b b c) '() 0)
==>3
(count-dist-elements '(1 2 1 1 2 3 4 5 5 6 6 7 7 8 8 8 9) '() 0)
==>9
或者,如果你想它遞歸迭代沒有(和,它使用函數調用像所示) ,
(define (count-dist-elements lst . dist-elems)
(let ((dist-elems (if (null? dist-elems) '() (car dist-elems))))
(cond ((null? lst) 0)
((member (car lst) dist-elems)
(count-dist-elements (cdr lst) dist-elems))
(else
(+ 1 (count-dist-elements (cdr lst) (cons (car lst) dist-elems)))))))
給出了相同的結果。
(count-dist-elements '(1 2 1 1 2 3 4 5 5 6 6 7 7 8 8 8 9))
==>9
我不認爲這有什麼與你的困難,但你的代碼是不是很正確縮進。如果這反映了它的實際外觀,並且不僅僅是將它輸入到Stack Overflow時出現的一個小問題,我強烈建議你養成* always *縮進的習慣並小心地分隔代碼?這會讓閱讀變得更容易(對於你自己和他人),並且會犯一些更難以忽略的錯誤。 – 2011-03-07 23:29:20