球拍 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,而 xsn 将是您在调用 cached-assoc 之前为它们定义的任何值。我相信混淆的根源在于 cached-assoc 返回 lambda,一旦你理解了这一点就会很清楚。