我有这个写的方法
(define (lev n L)
;(set! L(apply append L))
(cond ((null? L) '())
((eq? n (car (car L))) (car L))
(else (lev n (cdr L)))))
我想应用'设置!'在递归之前只有一次并且完成它。我无法想到如何做到这一点。
答案 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!
,在惯用方案中我们倾向于避免变异操作。