【问题标题】:Scheme::R5RS. I'm studying lambda and I don't understand these codes [closed]方案::R5RS。我正在研究 lambda,但我不明白这些代码 [关闭]
【发布时间】:2020-02-16 07:31:23
【问题描述】:
我正在为我的期中学习 lambda,我理解这个概念。 ** lambda 函数只是一种定义函数而不给它命名的方法。 ** lambda 格式必须是 ((lambda (x y z) (formula) 参数) **如果我错了,请纠正我。 我不明白下面的代码。 有人可以向我解释为什么答案是这样的吗? 我知道很多,你不必解释所有的例子。 谢谢!
((lambda (x y z)(x(/ y 2)(* 3 z)6))+ 4 2)                   ;14
((lambda (x)((lambda (x)(/ x 4))(+ x 2)))6)                 ;2
((lambda (x y)(+ (x * y)(x + y)))(lambda (x y)(x y y ))3)   ;15
(((lambda (a)(lambda (b) '(lambda (c) '(a b c)))) 1) 2)
(((lambda(x)(lambda(y)(+ x y))) 12) ((lambda(z)(* 3 z)) 3))
(define (x y z)((lambda (y z)(- y z)) z y)) (x 3 5)
((lambda (x y) (+ 3 x (* 2 y))) (+ 3 3)(* 2 2))
((lambda(x)(lambda(y)(+ x y)))12)

【问题讨论】:

    标签: lambda scheme lisp racket r5rs


    【解决方案1】:

    您可以轻松地将lambda 重写为let。例如。

    ((lambda (x y z)
       (x (/ y 2)
          (* 3 z)
          6))
     + 
     4 
     2)
    

    让我们:

    (let ((x +) (y 4) (z 2))
      (x (/ y 2)
         (* 3 z)
         6))
    

    这是完全相同的代码,但可能更易读。每个被立即调用的lambda 都可以在替换步骤之后获得该处理。 现在您可以使用替换规则了。将x 替换为+,将y 替换为4,将z 替换为2,并将调用/let 替换为相同的表达式并替换值:

    (+ (/ 4 2)
       (* 3 2)
       6))
    

    用结果替换简单的表达式:

    (+ 2
       6
       6))
    ; ==> 14
    

    然后就可以了。轻松愉快。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-11
      • 2012-09-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多