如何使用递归搜索元素在方案列表中出现的次数

时间:2017-03-06 19:39:05

标签: list recursion scheme

问题是要计算e在整数列表中出现的次数:(计算e L)

这是我到目前为止所做的......(我显然知道它不正确)

(define count(lambda(e L)
           (cond
             ((null? L)         0)
             ((= e (car L))    (e(cdr L)))
             (#t (count(e(cadr L))))
)))

任何想法??

2 个答案:

答案 0 :(得分:1)

您的代码中有多个错误,这是更正后的版本:

(define count
  (lambda (e L)
    (cond
      ((null? L)     0)
      ((= e (car L)) (+ 1 (count e (cdr L))))
      (else          (count e (cdr L))))))

请注意:

  • 您将参数传递给count的方式是错误的
  • 通过列表推送递归的正确方法是调用cdr,而不是cadr
  • 您忘记在第二种情况下致电count
  • 最后一个案例应使用else处理,而不是#t

答案 1 :(得分:0)

您缺少的关键步骤是找到值时:您需要返回

plus(1 count(e(cdr L)))