- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
let、let* 和 letrec 之间有什么区别?
请给出详尽的解释和示例。
最佳答案
您最好的选择是阅读official R5RS descriptions let
、let*
和 letrec
。
但是,简而言之:
(let ((x 2))
(let ((x 3) (y x))
y) => 2
(let ((x 2))
(let* ((x 3) (y x))
y) => 3
因此 let
和 let*
之间的区别是 let
将评估相对于上面级别的所有绑定(bind)(因此它不会)不管它们以什么顺序列出),而 let*
按顺序执行。 (let* ((x a) (b y)))
相当于 (let ((x a)) (let ((b y)))
。
letrec
允许您绑定(bind)递归值。因此,您可能会编写一个只想位于函数作用域内的递归函数,并使用 letrec
将其绑定(bind)到名称。
关于方案:何时使用 let、let* 和 letrec?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16530534/
两者 letrec和 letrec*在 R6RS 中,但有 only letrec在 Racket 中,没有 letrec* .这些之间有什么区别? 最佳答案 总之 Racket letrec和 R6
Kent Dybvig 在 The Scheme Programming Language for letrec 和 letrec* 中给出的两个示例是: (letrec ([sum (lambda
有人告诉我,以下表达式旨在计算为 0,但许多 Scheme 实现将其计算为 1: (let ((cont #f)) (letrec ((x (call-with-current-continuat
我正在尝试使用match-lambda模式匹配对letrec的调用。在我看来,这种模式: (match-lambda (`(letrec ((, ,) . (, ,)) , . ,) `()
在阅读“The Seasoned Schemer”时,我开始了解letrec。我了解它的作用(可以用 Y-Combinator 复制),但本书使用它来代替对已经defined 函数的重复操作,该函数对
怎么可以letrec无需使用 set! 即可实现? 在我看来 set!是一种命令式编程结构,如果使用它,就会失去函数式编程的好处。 最佳答案 我知道通常我们要求复制内容,但您的问题没有简短的答案。 h
我正在用 Scheme (DrRacket Pretty Big) 编写一个愚蠢的 letrec: (letrec ((is-creative? (lambda (writing)
R5RS 为库形式的语法提供了建议的宏定义: http://schemers.org/Documents/Standards/R5RS/HTML/r5rs-Z-H-10.html#%_sec_7.3
Core Erlang 的 letrec 有什么用? Richard Carlsson 在 "Introduction to Core Erlang" 中写道: Furthermore letrec
这个问题已经有答案了: Confused by the difference between let and let* in Scheme (2 个回答) 已关闭10 年前。 let、let* 和 l
我只是在玩一个 NFA 来识别字符串。我有一个宏,它创建一个函数,该函数消耗输入并将其余部分传递给其他一些函数。因为我的 NFA 图中可能存在循环,所以我使用 letrec 将整个图组合在一起。这是一
我有几本关于 Scheme 的书,其中一些提到了名为 let 和 letrec 的书,但实际上没有一本会给出令人信服的例子(我的意思是,我何时以及为什么会使用一个而不是另一个)。 有没有letrec/
我无法理解维基百科上给出的 HM 系统的 letrec 定义,这里:https://en.wikipedia.org/wiki/Hindley%E2%80%93Milner_type_system#R
我是计划的初学者。我曾经在使用 letrec 和使用 lambda 绑定(bind)时执行过类似的程序。 (define (drop l n) (letrec ((iter (lambda(ls
考虑在方法主体中定义为 lambda 表达式并分配给变量的阶乘函数: Func factfail = n => { if (n == 0) return 1; else
我不明白两者之间有什么区别(对于人为的例子感到抱歉): (define average (lambda (elems) (define length (lambda (xs)
我是一名优秀的程序员,十分优秀!