相关疑难解决方法(0)

由于let和let*之间的差异而感到困惑

有人能简单解释一下这个区别吗 我不认为我理解我所咨询的教科书/网站的概念.

scheme let

25
推荐指数
2
解决办法
8431
查看次数

对 let 到 lambda 的转换感到困惑

我目前正在阅读Mike Vanier撰写的关于 Y-combinator的这篇很棒的文章。在解释中删除了以下行:

事实证明,任何 let 表达式都可以使用以下等式转换为等效的 lambda 表达式:

(let ((x <expr1>)) <expr2>) ==> ((lambda (x) <expr2>) <expr1>)

文章通过转换来说明这个语句:

(define (part-factorial self)
  (let ((f (self self)))
    (lambda (n)
      (if (= n 0)
        1
        (* n (f (- n 1)))))))
Run Code Online (Sandbox Code Playgroud)

到:

(define (part-factorial self)
  ((lambda (f)
    (lambda (n)
      (if (= n 0)
        1
        (* n (f (- n 1))))))
  (self self)))
Run Code Online (Sandbox Code Playgroud)

现在,我明白了上面两个代码片段是如何以及为什么是相同的,尽管我无法理解转换let为的一般方程lambda是:

(let ((x <expr1>)) <expr2>)
==> ((lambda (x) <expr2>) <expr1>)
Run Code Online (Sandbox Code Playgroud)

我很感激详细的解释。

lisp lambda scheme let racket

3
推荐指数
2
解决办法
1596
查看次数

如何使用lambda实现let*

我正在做lambda演算,在我的教科书中,它说你将如何let*使用lambda演算.

我的答案:x,y和z是参数; v1,v2和v3参数; e是身体:

((lambda (x y z) (e)) v1 v2 v3)
Run Code Online (Sandbox Code Playgroud)

书中的答案:

  ((lambda(x)
    ((lambda(y)
      ((lambda(z) e) v3))
      v2))
    v1)
Run Code Online (Sandbox Code Playgroud)

我不确定我的回答是否相同.如果没有,为什么我的回答是错误的,如何得出原始答案?

lambda scheme lambda-calculus let

2
推荐指数
1
解决办法
235
查看次数

标签 统计

let ×3

scheme ×3

lambda ×2

lambda-calculus ×1

lisp ×1

racket ×1