【问题标题】:where does racket lambda argument come from?球拍 lambda 参数来自哪里?
【发布时间】:2021-10-01 12:30:49
【问题描述】:

我之前问过一个类似的问题,我只是想确保我理解这个想法,在 -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))

【问题讨论】:

  • 如果f 是一个接受一个参数的函数,则f 等价于(lambda (x) (f x))。 (比较(f 1)((lambda (x) (f x)) 1)。)

标签: function lambda arguments racket programming-languages


【解决方案1】:

您的cached-assoc 过程返回f,这是一个以x 作为未绑定参数的函数。它还没有值,当你最终调用它时,值将是你传递给它的任何值:

((cached-assoc xs n) 10)

在上面的示例中,x 将绑定到 10,xsn 将是您在调用 cached-assoc 之前为它们定义的任何值。我相信混淆的根源在于cached-assoc 正在返回一个lambda,一旦你理解了这一点就会很清楚。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-07-27
    • 2020-12-26
    • 2015-04-08
    • 2021-09-12
    • 1970-01-01
    • 1970-01-01
    • 2014-05-10
    相关资源
    最近更新 更多