问题标签 [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.

0 投票
2 回答
378 浏览

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?

0 投票
1 回答
105 浏览

scheme - 我们如何在使用 `call/cc` 的程序和使用 CPS 编写的函数的程序之间进行转换?

方案编程语言说

事实证明,任何使用 call/cc 的程序都可以在没有 call/cc 的情况下在 CPS 中重写,但可能需要对程序进行全面重写(有时甚至包括系统定义的原语)。

一般的技巧有哪些

  • 将使用call/cc的程序转换为使用 CPS 编写的函数的程序

  • 反向转换?

0 投票
2 回答
86 浏览

scheme - `call/cc` 的函数参数是否可以等效地调用延续或在不调用延续的情况下返回?

方案编程语言说

Scheme 允许使用过程捕获任何表达式的延续call/cccall/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曾直接调用延续?kpk

两者都call/ccp不调用 continuation 完全没问题k吗?

0 投票
2 回答
158 浏览

scheme - 哪个最简单的评估模型可以解释 call/cc?

TL;DR: call/cc 做什么,(半)正式地说?

长版:我对延续和 call/cc 隐约熟悉,但对形式的理解并不强。我想要一个。

SICP 视频讲座中,我们看到了替代模型和元循环解释器。在 Shriram Krishnamurti 的编程语言课程中,我们看到了一种环境和商店传递风格。在我参加 uni 的编译器课程中,我通过操作堆栈来评估 Java 表达式。

最简单的可以表达 call/cc 的评估模型是什么,如何在其中表达 call/cc?

0 投票
1 回答
178 浏览

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 就像预定义的代码,需要在未来执行?(我说的是框架和用户代码)

0 投票
1 回答
90 浏览

scheme - callCC的澄清

我的背景是 Javascript、Python 和一点 Haskell。嗨,我是 Scheme 的新手(1 天大)。我想了解以下 2 个代码片段之间的区别。

使用 CallCC

为什么有人想用第二种方法来掌握你所居住的功能。从更大的角度来看,我错过了什么?

Scope 是否有任何限制来获取功能?

这绝对是 JS 中的样子h => 1 + 2 + 3 + h。如果我想掌握(+ 3 h)这意味着我需要将它写在单独的行中怎么办?

0 投票
0 回答
75 浏览

functional-programming - 为什么使用 goto 被认为是不好的做法,但 call/cc 不是?

我目前正在学习continuations的概念。我正在努力理解为什么通过例如goto命令直接控制流操作是一种不好的做法,但是使用call/cc这样做就很好。不是一样的东西,但是通过不同的方式实现的吗?

为什么使用 goto 被认为是一种不好的做法,但使用 call/cc 不是?

0 投票
1 回答
63 浏览

scheme - 如何分析呼叫/抄送中的等效接收者?

我正在阅读Scheme and the Art of Programming一书,但想不出以下问题的答案:

如果r

in (... (call/cc r) ...), 什么时候r可以改写为

0 投票
0 回答
44 浏览

lambda-calculus - 什么是 J 运算符,它与 call/cc 相同吗?

在研究 ISWIM 时,我听说过“J 算子”或“程序点算子”。我想知道它是什么。它的维基百科文章非常模糊:

在计算机科学中,Peter Landin 的 J 运算符是一种编程构造,它后组合一个 lambda 表达式,并延续到当前的 lambda 上下文。生成的“函数”是一等的,可以传递给后续函数,如果应用它会将其结果返回给创建它的函数的延续。

“后期创作”是什么意思?我查了一下,只能找到一个数学定义。我在其他地方搜索了很多,但发现的很少。有几页提到它,但没有一个详细描述它的实际情况。

那么,什么是 J 运算符,它的作用是什么,它与 call/cc 类似吗?

0 投票
1 回答
284 浏览

scheme - 呼叫 cc 示例球拍

我正在分析有关使用call/cc. 这个功能有点神秘,完全理解起来相当复杂。

我真的无法理解这段代码是如何工作的。下面是我的解读。

call/cc被称为通过

然后再次通过

使用传递给aslocal的参数调用该函数。但是值如何到达as ?6print+subx2print+suby

最重要的部分,所有这些指令的执行顺序是什么?