- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我开始怀疑我是否真的理解这个主题。
到目前为止,我将延续理解为调用带有闭包的函数(通常由另一个函数返回)。但是MLton seems to have a non‑standard special structure for this (我不确定理解的结构),并且在其他一些文档中,提到特殊优化( using jumps ,如第 58 页,打印第 51 页上快速提到的)带有延续,即,而不是对函数的命名调用关闭。另外,函数闭包有时似乎被描述为延续的基础,但没有被描述为延续,而有时人们则断言相反(函数闭包是延续的特殊情况,而不是其他方式)。
举个例子,延续与此有何不同,以及使用延续而不是带有闭包的函数看起来相同的内容:
datatype next = Next of (unit -> next)
fun f (i:int): next =
(print (Int.toString i);
Next (fn () => f (i + 1)))
val Next g = f 1
val Next g = g ()
val Next g = g ()
val Next g = g ()
…
我想知道这个问题,无论是在一般的计算机科学环境中,还是在实际的 SML 环境中。
注意:问题可能看起来与“difference between closures and continuations”相同”,但阅读这篇文章并没有回答我的问题,也没有以实际案例为基础。除了它促使我添加另一个问题:为什么延续被认为比闭包更抽象,如果最终延续是由闭包组成的,正如上面链接中不完整的(在我看来)答案所暗示的那样?
差异真的很重要还是只是风格/语法/词汇的问题?
我觉得单子(monad)与延续之间也出现了类似的问题,但这对于单个问题帖子来说太多了(但如果相反,可以暂时简单地回答,随意……)。
<小时/>仍然来自 MLton 的世界,这种措辞似乎表明延续和函数闭包是相同的(除非我理解不正确)。
CommonArg (mlton.org) ,靠近页面底部,说道:
What I think the common argument optimization shows is that the dominator analysis does slightly better than the reviewer puts it: we find more than just constant continuations, we find common continuations. And I think this is further justified by the fact that I have observed common argument eliminate some env_X arguments which would appear to correspond to determining that while the closure being executed isn’t constant it is at least the same as the closure being passed elsewhere.
这两个词所表达的意思是一样的,不是吗?
类似地,可能更明确,在本页底部:ReturnStatement (mlton.org) .
那里也有,好像也是一样的。是吗?
最佳答案
似乎存在术语困惑。 “延续”是一个抽象概念,是一个表达式的上下文的含义。闭包是一种非常特殊的实现方式表示函数的值(高阶语言可以在没有闭包的情况下实现,例如,使用替换语义)。
控制运算符可以捕获当前的延续并生成它的特定表示(这称为具体化)。捕获的延续的特定表示可能确实是一个闭包——也可能不是。例如,在 OCaml 中,delimcc 库捕获的延续被表示为抽象数据类型的值(其实现与闭包有很大不同)。您可能会发现下一页的介绍部分很有用。 Undelimited continuations are not functions
关于closures - 函数闭包与延续,一般和 SML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25953545/
我刚刚开始使用 Google Closure 做一些工作,我想将选择字段的创建移动到它自己的模板中,并使用类似以下内容调用该模板: {call templates.utils.select} {p
我有一些代码,简化后看起来像: fn foo() -> Vec { unsafe { unsafe_iterator().map(|n| wrap_element(n)).co
我正在从脚本内部调用Closure Compiler(closurecompiler.jar)。该脚本还生成Closure Compiler需要编译的一些javascript。有没有办法将此JavaS
以下示例代码生成有关高级优化的编译器警告:“JSC_UNSAFE_NAMESPACE:为命名空间 NS 创建的别名不完整”。如果我删除@enum 注释,它不会发出警告。 var NS = {}; /*
看代码: let add_one = |&: x| { 1 + x }; 我知道x是闭包参数,但是闭包中的&:是什么意思? 最佳答案 这是 Rust 的一个文档不足的部分(并且过时,请参阅评论)。我知
PHP manual for anonymous functions (即闭包)指出: Anonymous functions are currently implemented using the
我从脚本内部调用 Closure Compiler (closurecompiler.jar)。该脚本还生成了一些 Closure Compiler 需要编译的 javascript。有没有办法将这个
关闭。这个问题是opinion-based .它目前不接受答案。 想改善这个问题吗?更新问题,以便可以通过 editing this post 用事实和引文回答问题. 7年前关闭。 Improve t
当鼠标在文档正文中移动时,我试图调用一个函数。但是,下面的事件处理程序不起作用。 goog.events.listen(document, 'onmousemove', function(e)
我试过了 java -jar compiler.jar --js jj.js --js_output_file jj.js 输出文件大小为 0。 如果我不想从 .min.js 重命名为 .js,我该怎
Google Closure UI库如何与Google DART一起使用? 最佳答案 Dart没有使用JavaScript库的功能。这是设计使然,因为Dart旨在同时针对Dart VM和转换为JS的D
是否可以使用 Google Closure 编译器在两个文件中定义一个类?例如,如果我自动生成一个类并希望为用户输入的代码保留另一个类: 在 MyClass.AutoGenerated.js 中 go
当我在 http://closure-compiler.appspot.com 处的闭包编译器中测试以下代码时: // ==ClosureCompiler== // @output_file_name
是否可以使用 Google Closure 编译器在两个文件中定义一个类?例如,如果我自动生成一个类并希望为用户输入的代码保留另一个类: 在 MyClass.AutoGenerated.js 中 go
当我运行闭包编译器时,会收到一堆这样的警告: [exec] jquery/3.2.1/dist/jquery.js:733: WARNING - Suspicious code. The resul
假设您正在一个具有多个外部库依赖项的 javascript 项目中工作,并且想要在 ADVANCED_OPTIMIZATIONS 模式下使用 Google Closure Compiler 编译您的源
我正在为 PIXI.js 库准备 externs。我收到以下警告: js/Test.js:188: WARNING - Property position never defined on PIXI.
我最近使用 Google 的 Closure 编译器创建了一个 JavaScript 库:https://github.com/bvaughn/task-runner 我打算让这个库供那些也需要完整闭
我正在尝试自学闭包模板。我做了一个简单的文件 simple.soy: {namespace examples.simple} /** * says hello to the world * @pa
我正在将一个项目从 jQuery 迁移到 Closure。我有一些我想编译的只迁移了一半的代码。未编译的源工作正常。我想知道使用 SIMPLE_OPTIMIZATIONS 编译它的编译命令。 原始基于
我是一名优秀的程序员,十分优秀!