(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