在SCHEME中的递归方法中仅应用一次调用

时间:2014-07-24 19:06:51

标签: scheme

我有这个写的方法

(define (lev n L)
  ;(set! L(apply append L))
  (cond ((null? L) '())
        ((eq? n (car (car L))) (car L))
        (else (lev n (cdr L)))))

我想应用'设置!'在递归之前只有一次并且完成它。我无法想到如何做到这一点。

1 个答案:

答案 0 :(得分:2)

试试这个:

(define (lev n L)
  (let loop ((L (apply append L)))
    (cond ((null? L) '())
          ((eq? n (car (car L))) (car L))
          (else (loop (cdr L))))))

这里我们使用named let来定义lev内的帮助程序(在此示例中,它称为loop),在调用它之前,我们应用append到输入列表并将其分配给一个新变量,也称为L。在这种情况下,没有必要使用set!,在惯用方案中我们倾向于避免变异操作。