【问题标题】:Rewrite an expression using let使用 let 重写表达式
【发布时间】:2019-06-19 16:42:42
【问题描述】:

我一直在教计划语言,在我的教科书中,我遇到了以下表达式。我的问题是为什么它评估数字“10”?有人可以向我解释一下吗?意味着创建了哪些本地环境以及为符号创建了哪些绑定。 我也知道每个 lambda 表达式都可以使用let 重写。知道怎么做吗? 我将不胜感激。

(let ((x 10)) 
  (define y (lambda (x) x)) 
  (define x 5) 
  (+ x (y x)))

【问题讨论】:

    标签: lambda scheme racket let


    【解决方案1】:

    您的代码更易读:

    (let ((x 10))
      (define y (lambda (x) x))
      (define x 5)
      (+ x (y x)))
    

    您可以应用替换方法:

    (+ x (y x)) ; ==>
    (+ 5 (y 5)) ; ==>
    (+ 5 ((lambda (x) x) 5)) ; ==>
    (+ 5 5) ; ==>
    10
    

    你弄错了。每个let 都可以重写为lambda,它会立即被调用:

    (let ((a aexpr) (b bexpr))
      body ...)
    
    ; ==
    
    ((lambda (a b) body ...) aexpr bexpr)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-04
      • 1970-01-01
      • 2011-09-03
      • 2023-04-09
      • 2014-01-01
      • 1970-01-01
      相关资源
      最近更新 更多