Scheme

时间:2016-09-11 05:26:59

标签: list recursion scheme

我需要提出一个计算函数来计算列表中原子的出现。我成功实现了一个简单的版本,但它只适用于非嵌套列表:

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

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