在SCHEME中的递归方法中仅应用一次调用
我有我写的这个方法在SCHEME中的递归方法中仅应用一次调用,scheme,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))))) 我要应用“集合!”在递归之前只执行一次,并使用它完成。我想不出怎么做。试试这个: (define (lev n L) (let loop ((L (apply append L)))
(define (lev n L)
;(set! L(apply append L))
(cond ((null? L) '())
((eq? n (car (car L))) (car L))
(else (lev n (cdr L)))))
我要应用“集合!”在递归之前只执行一次,并使用它完成。我想不出怎么做。试试这个:
(define (lev n L)
(let loop ((L (apply append L)))
(cond ((null? L) '())
((eq? n (car (car L))) (car L))
(else (loop (cdr L))))))
在这里,我们使用a来定义
lev
(在本例中,它被称为loop
),在调用它之前,我们将append
应用于输入列表,并将其分配给一个新变量,也称为L
。在这种情况下,不必使用set代码>,在惯用方案中,我们倾向于避免变异操作。这是伟大的奥斯卡·洛佩兹:)因此我得到了这个错误,因为过程#[composite procedure 15 loop]是用两个参数调用的;它需要1个论证,我正在做(lev'bl),其中L是((a1)(b2)(c3))((d4)(e5)(f6)),我已经找到了另一种方法,但我想知道为什么我会犯这个错误,我不知道understand@Crowlands这是我的错误,当我们调用循环
时,只需要一个参数(与lev
相同的n
,因为它在迭代过程中不会改变。)现在已修复:)请格式化您的代码。您的目标是什么?你试过什么?你所尝试的与你所期望的有什么不同?