争论从何而来?

Where is the argument coming from?

大家可以注意到函数体中lambda中的v,这个v是从哪里来的,它的依据是什么?

(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)))))])
  (lambda (v) (f v))))

整个表达式 return 结果是一个 lambda,在那个 lambda 中有一个名为 v 的形参。它还没有值,您需要 调用 lambda 将值绑定到 v 并产生结果(假设代码是工作):

((letrec ([memo (make-vector n #f)] ; notice the extra opening `(`, we want to call the returned lambda
          [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)))))])
   (lambda (v) (f v)))
 10) ; <- the value 10 gets bound to `v`

但是,您的代码不正确。您指的是名为 nxs 的变量,但它们未在任何地方定义并且需要它们自己的值。程序 vector-assoc 不存在。另外,最后的lambda是多余的,你可以简单地returnf,没有必要把它换成额外的lambda。最后:您应该 define 为整个表达式命名,这样调用起来会更容易。

我不会详细介绍,因为首先您需要修复该功能并使其正常工作,并且根本不清楚您想要做什么 - 但这应该是一个单独的问题。