问题标签 [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.
lambda - 如何使宏观卫生的一部分
我想要一个lambda
名为 的版本,lambda-r
您可以在其中使用return
。一个例子:
这将给出价值6
。尽管您可能期望该值为 7,但它是 6,因为 1 在到达 2 之前从 lambda 表达式返回。
这是我正在寻找的那种转换的例子。假设一个要使用lambda-r
如下:
我希望它变成这样:
这也可以用 let 表达式而不是内部定义来表达,但为了清楚起见,我使用了定义。
请注意,上面的代码确实按预期工作。问题是我无法表达lambda-r
为宏。原因是我想要k
并且v
保持卫生,但我不想return
保持卫生。
我现在的宏是这样的:
这不起作用return
,因为经过卫生处理,因此在使用lambda-r
. 所以(lambda-r () (return 1))
给出了一个错误,表明这return
不是一个有效的标识符。
编辑:感谢 Nathan Sanders 的回答,我更接近于理解我必须在这里做什么。但是,我不完全理解以下程序,因此还无法使其正常工作。如果您能解释/指导我访问解释以下内容的资源,我将不胜感激:
syntax
程序_datum->syntax
/syntax->datum
程序_
编辑:没关系-我现在知道了:)
lisp - 只能使用 lambdas 和闭包来实现 call-with-current-continuation 吗?
有谁知道是否call/cc
可以仅使用 lambda 和闭包来实现?
似乎call/cc
中断了程序的流程(如异常),但 lambdas 和闭包不能这样做。因此我认为call/cc
不能通过 lambdas 和闭包来实现。
还有什么想法吗?
c# - c# 5.0 中新的异步特性如何用 call/cc 来实现?
我一直在关注有关async
c# 5.0 中新功能的新公告。我对延续传递风格和新的 c# 编译器对代码的转换有基本的了解,就像Eric Lippert 的帖子中的这段代码:
我知道有些语言通过 call-with-current-continuation ( callcc
) 原生地实现了延续,但我并不真正理解它是如何工作的或它究竟做了什么。
所以这里的问题是:如果安德斯等人。决定咬紧牙关,只callcc
在 c# 5.0 中实现而不是async
/await
特殊情况,上面的代码片段会是什么样子?
scope - 计划继续在奇怪的地方重新启动
更新:
所以问题似乎出在生成器上,不一定与下一个令牌和前瞻功能有关。我在 set!s 发生的地方添加了一些显示调用,发现问题是在第二次调用 (generate-token) 之后,它从第一次调用的位置恢复执行。
这是程序的完整代码(我在下面留下了原始帖子以供参考):
按照下面原始帖子中的第一个示例执行下一个令牌和前瞻调用会产生:
我不知道为什么它会这样,但我承认我是新手,可能不完全理解后果。任何帮助,一如既往,将不胜感激。
谢谢。
原帖如下:
我创建了一个生成器,它解析一个文本文件并以字符串的形式一次返回一个令牌。所以,如果我有一个文件包含
对 (generate-token) 的连续调用分别返回“这些”“是”“我的”……。这似乎有效,但是我将其作为解析器的一部分编写为更大的任务。生成器似乎工作顺利,但是当我正在构建一个 LR(1) 解析器来解析令牌流时,我需要能够执行前瞻。为此,我创建了以下程序:
但是,这些并没有按预期工作。我的印象是方案(这是用drRacket编写的,但使用#lang r5rs)按值传递对象,所以(字符串复制调用假设是不必要的,但这仍然不能按预期工作。它像这样工作:
在不同的流程中,如果首先调用 (lookahead),则它可以正常工作。
如果有人对正在发生的事情有任何线索,任何见解将不胜感激。披露:这是学校作业,但我不是要你为我做这件事>.>。
functional-programming - 是否有用于重写 CPS 的宏?
例如我有两个异步方法
但我想写类似的东西
scheme - 我似乎无法在 Scheme 中全神贯注于 call/cc
有人对它的工作原理有很好的指导吗?带有视觉辅助的东西会很好,我遇到的每一个指南似乎都在说同样的事情,我需要重新审视它。
lua - Scheme中的协程(R5RS)
所以我第一次遇到了lua中协程的概念,lua的实现或多或少是可以理解的。我现在正在学习scheme,我知道用call/cc实现了相同的功能,但我有点麻烦围绕一个人将如何实现这一目标。任何人都知道一个简单的教程或关于这个主题的东西?
functional-programming - 可以使用“call/cc”实现“if”吗?
有人告诉我“call/cc”可用于实现任意控制流构造,所以我尝试使用“call/cc”来实现所有此类构造,但我遇到了麻烦。假设我没有“if”,我将如何使用“define-syntax”和“call/cc”来实现它?有可能还是我被误导了?我知道如何使用“call/cc”实现无条件跳转,但在机器级别,条件执行是使用分支指令执行的,分支指令的执行取决于处理器的状态位。如果没有这种类型的构造,我看不到它是如何完成的。
haskell - 如何让 callCC 更有活力?
我认为 ContT 的正确类型应该是
和其他控制操作员
不幸的是,我无法进行callCC
类型检查,也不知道该怎么做。我设法进行了shift
类型reset
检查
但是,我仍然不能在这样的递归跳跃中使用shift
和?reset
有没有人试过这个?
javascript - 带闭包的呼叫/CC
Wikipedia提到“在任何支持闭包和适当尾调用的语言中,都可以以连续传递样式编写程序并手动实现 call/cc。”
例如,如何在 javascript 中实现此功能?我知道 javascript 不做 tco,但假设堆栈空间没有用完