球拍 lambda 参数从何而来?
where does racket lambda argument come from?
我之前问过类似的问题,我只是想确保我理解这个想法,在 -lambda(x)- 第 4 行中,x 是什么,它来自哪里?
(define (cached-assoc xs n)
(letrec ([memo (make-vector n #f)]
[acc 0]
[f (lambda(x)
(let ([ans (vector-assoc x memo)])
(if ans
(cdr ans)
(let ([new-ans (assoc x xs)])
(begin
(vector-set! memo acc (cons x new-ans))
(set! acc (if (= (+ acc 1)) 0 (+ acc 1)))
new-ans)))))])
f))
您的 cached-assoc
过程 returns f
,一个以 x
作为未绑定参数的函数。它还没有值,该值将是您最终调用它时传递给它的任何值:
((cached-assoc xs n) 10)
在上面的示例中,x
将绑定到 10,而 xs
和 n
将是您在调用 cached-assoc
之前为它们定义的任何值。我相信混淆的根源在于 cached-assoc
是 返回 lambda
,一旦你理解了这一点就会很清楚。
我之前问过类似的问题,我只是想确保我理解这个想法,在 -lambda(x)- 第 4 行中,x 是什么,它来自哪里?
(define (cached-assoc xs n)
(letrec ([memo (make-vector n #f)]
[acc 0]
[f (lambda(x)
(let ([ans (vector-assoc x memo)])
(if ans
(cdr ans)
(let ([new-ans (assoc x xs)])
(begin
(vector-set! memo acc (cons x new-ans))
(set! acc (if (= (+ acc 1)) 0 (+ acc 1)))
new-ans)))))])
f))
您的 cached-assoc
过程 returns f
,一个以 x
作为未绑定参数的函数。它还没有值,该值将是您最终调用它时传递给它的任何值:
((cached-assoc xs n) 10)
在上面的示例中,x
将绑定到 10,而 xs
和 n
将是您在调用 cached-assoc
之前为它们定义的任何值。我相信混淆的根源在于 cached-assoc
是 返回 lambda
,一旦你理解了这一点就会很清楚。