Function 计划在整个计划中保持价值
在以下代码中,avg和avg2的值随着代码的进行而变化。如何使值在整个函数中保持不变,而不在函数外部定义它们?我应该使用助手函数吗Function 计划在整个计划中保持价值,function,scheme,constants,Function,Scheme,Constants,在以下代码中,avg和avg2的值随着代码的进行而变化。如何使值在整个函数中保持不变,而不在函数外部定义它们?我应该使用助手函数吗 (define (covariance-list x y) (let ((avg (average x))) (let ((avg2 (average y))) (if (null? x) '() (cons (* (- (car x) avg)(- (car y) avg2)) (covariance
(define (covariance-list x y)
(let ((avg (average x)))
(let ((avg2 (average y)))
(if (null? x)
'()
(cons (* (- (car x) avg)(- (car y) avg2))
(covariance-list (cdr x) (cdr y)))))))
我认为你不希望它们是常数,因为它们取决于函数的参数。您可能只是希望在每次递归调用期间不重新计算它们
(define (covariance-list x y)
(let ((avg (average x))
(avg2 (average y)))
(let loop ((x x)
(y y))
(if (null? x)
'()
(cons (* (- (car x) avg)
(- (car y) avg2))
(loop (cdr x) (cdr y)))))))
我认为你不希望它们是常数,因为它们取决于函数的参数。您可能只是希望在每次递归调用期间不重新计算它们
(define (covariance-list x y)
(let ((avg (average x))
(avg2 (average y)))
(let loop ((x x)
(y y))
(if (null? x)
'()
(cons (* (- (car x) avg)
(- (car y) avg2))
(loop (cdr x) (cdr y)))))))
一种方法是使用辅助功能:
(define (covariance-list x y)
(define (covariance-list-aux x y avg-x avg-y)
(if (null? x)
'()
(cons (* (- (car x) avg-x) (- (car y) avg-y))
(covariance-list-aux (cdr x) (cdr y) avg-x avg-y))))
(covariance-list-aux x y (average x) (average y)))
一种方法是使用辅助功能:
(define (covariance-list x y)
(define (covariance-list-aux x y avg-x avg-y)
(if (null? x)
'()
(cons (* (- (car x) avg-x) (- (car y) avg-y))
(covariance-list-aux (cdr x) (cdr y) avg-x avg-y))))
(covariance-list-aux x y (average x) (average y)))
您应该尽量避免总是递归地传递avg-x和avg-y。@uselpa,因为它们正在消耗堆栈,您的意思是?因为您得到的印象是它们可能会改变(否则为什么您会希望一次又一次地传递它们?),但它们不会。@uselpa,这是一个有趣的设计约束/编码标准。我能理解其中的逻辑。但是,我始终将常量传递给过程。有没有一个编码标准可以让我参考(可能是特定于方案的)来详细阐述这个想法?你应该尽量避免总是递归地传递avg-x和avg-y。@uselpa,因为它们正在消耗堆栈,你的意思是?因为你觉得它们可能会改变(否则你为什么要一遍又一遍地传递它们?),但是他们没有。@uselpa,这是一个有趣的设计约束/编码标准。我能理解其中的逻辑。但是,我始终将常量传递给过程。有没有一个编码标准可以让我参考(可能是特定于方案的)来详细阐述这个想法?