我需要提出一个计算函数来计算列表中原子的出现。我成功实现了一个简单的版本,但它只适用于非嵌套列表:
(define (foo x atom)
(cond ((null? x) 0)
((eqv? (car x) atom) (+ 1 (count (cdr x) atom)))
(else (count (cdr x) atom))))
然后我尝试了它的嵌套列表版本。但是,我收到了错误:
argument of wrong type [car]
(car *whatever variable in list*)
代码如下:
(define (foo x atom)
(cond
((null? x) 0)
((not (list? (car x)))
(cond
((eqv? (car x) atom) (+ 1 (foo (cdr x) atom)))
(else (foo (cdr x) atom))))
(else (+ (foo (car x) atom) (foo (cdr x) atom)))))
当我传递如下列表时失败:
(foo '(1 2 3 1 1 4 1) 1)
答案 0 :(得分:0)
递归计数示例:
(define (count k lst)
(if (null? lst)
0
(if (= k (car lst))
(+ 1 (count k (cdr lst)))
(count k (cdr lst)))))
(count 2 '(2 3 4 4 4 5 5 3 2))
> 2
(count 4 '(2 3 4 4 4 5 5 3 2))
> 4
说明:如果k存在于car(first)中,则添加1并检查cdr(rest)...