问题标签 [callcc]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
scheme - Is the function argument to `call/cc` written in CPS?
The parameter of call/cc
is a procedure taking as its argument a continuation. Is the procedure written in CPS?
scheme - 我们如何在使用 `call/cc` 的程序和使用 CPS 编写的函数的程序之间进行转换?
方案编程语言说
事实证明,任何使用 call/cc 的程序都可以在没有 call/cc 的情况下在 CPS 中重写,但可能需要对程序进行全面重写(有时甚至包括系统定义的原语)。
一般的技巧有哪些
将使用
call/cc
的程序转换为使用 CPS 编写的函数的程序反向转换?
scheme - `call/cc` 的函数参数是否可以等效地调用延续或在不调用延续的情况下返回?
方案编程语言说
Scheme 允许使用过程捕获任何表达式的延续
call/cc
。call/cc
必须传递p
一个参数的过程。call/cc
构造当前延续的具体表示并将其传递给p
. 延续本身由过程表示k
。每次k
应用于一个值时,它都会将该值返回给call/cc
应用程序的延续。从本质上讲,这个价值变成了应用的价值call/cc
。如果p
不调用k
就返回,则过程返回的值成为应用程序的值call/cc
。
p
就被调用而言,是否有以下两种定义等价的方式call/cc
:
p
不调用就返回k
,p
调用k
它的其他返回值?
我不确定如何call/cc
定义。除了通过调用间接调用外,是否call/cc
曾直接调用延续?k
p
k
两者都call/cc
和p
不调用 continuation 完全没问题k
吗?
javascript - CallCC 是 goto 的改进版本吗?
我的背景是 Javascript、Python 和一点 Haskell。我正在尝试理解 callCC,有很多解释,但我找不到它们微不足道的 & 我遇到了这个https://www.cs.bham.ac.uk/~hxt/research/Logiccolumn8.pdf我觉得我几乎明白了,但我需要一些帮助来理解 C 代码。
下面是在 GNU C 中跳回函数的代码。
label_as_result函数中的 return 语句有什么作用?p in main是否将堆栈帧存储在堆中以及它停止的指令行中?跳回函数意味着再次创建一个堆栈帧并从我们离开的地方继续?
在这段代码下面有一段
但是在具有一流函数和callCC的语言中,没有这样的实现限制。就像C中的结果标签一样,我们可以从函数返回由callCC引入的延续,以便跳回函数。当我们使用goto执行此操作时,堆栈被粉碎,但使用 callCC 函数再次返回。考虑以下函数
延续 k 作为结果的一部分返回,大致类似于在 C 中返回标签作为结果。
堆栈被砸了是什么意思,他的意思是如果你使用 goto 会发生堆栈溢出?callCC 如何使用蹦床解决这个问题?
正如许多人所说,callCC 提供了早期返回语义,这意味着它像 python 或 Javascript 中的 yield 吗?是否可以使用yield在Javascript中编写callCC?
我如何在 Javascript 中构思上述代码
它甚至可以在没有任何生成器概念的情况下简单地编写为
这意味着 callCC 是一个返回延续但所有其他函数都采用延续的函数。延续就像未定的代码,需要在未来执行,而 callCC 就像预定义的代码,需要在未来执行?(我说的是框架和用户代码)
scheme - callCC的澄清
我的背景是 Javascript、Python 和一点 Haskell。嗨,我是 Scheme 的新手(1 天大)。我想了解以下 2 个代码片段之间的区别。
使用 CallCC
为什么有人想用第二种方法来掌握你所居住的功能。从更大的角度来看,我错过了什么?
Scope 是否有任何限制来获取功能?
这绝对是 JS 中的样子h => 1 + 2 + 3 + h
。如果我想掌握(+ 3 h)
这意味着我需要将它写在单独的行中怎么办?
functional-programming - 为什么使用 goto 被认为是不好的做法,但 call/cc 不是?
我目前正在学习continuations的概念。我正在努力理解为什么通过例如goto命令直接控制流操作是一种不好的做法,但是使用call/cc这样做就很好。不是一样的东西,但是通过不同的方式实现的吗?
为什么使用 goto 被认为是一种不好的做法,但使用 call/cc 不是?
scheme - 如何分析呼叫/抄送中的等效接收者?
我正在阅读Scheme and the Art of Programming一书,但想不出以下问题的答案:
如果r是
in (... (call/cc r) ...)
, 什么时候r可以改写为
lambda-calculus - 什么是 J 运算符,它与 call/cc 相同吗?
在研究 ISWIM 时,我听说过“J 算子”或“程序点算子”。我想知道它是什么。它的维基百科文章非常模糊:
在计算机科学中,Peter Landin 的 J 运算符是一种编程构造,它后组合一个 lambda 表达式,并延续到当前的 lambda 上下文。生成的“函数”是一等的,可以传递给后续函数,如果应用它会将其结果返回给创建它的函数的延续。
“后期创作”是什么意思?我查了一下,只能找到一个数学定义。我在其他地方搜索了很多,但发现的很少。有几页提到它,但没有一个详细描述它的实际情况。
那么,什么是 J 运算符,它的作用是什么,它与 call/cc 类似吗?
scheme - 呼叫 cc 示例球拍
我正在分析有关使用call/cc
. 这个功能有点神秘,完全理解起来相当复杂。
我真的无法理解这段代码是如何工作的。下面是我的解读。
call/cc
被称为通过
然后再次通过
使用传递给aslocal
的参数调用该函数。但是值如何到达as ?6
print+sub
x
2
print+sub
y
最重要的部分,所有这些指令的执行顺序是什么?