|
|
1
16
我不认为我完全理解这一点,但我只能想到一个( 极其
|
|
|
2
21
理解方案
首先,我个人认为
下一步是内部lambda的主体。
现在开始变得更有意义了。现在只需一小步,就可以将其完全重写为类似C的语法(或者类似JavaScript的语法,如果您愿意的话),从而得到:
连续体入门
然后马上打电话
. 看起来就像
最初
但延拓就像一个函数;它可以用一个参数调用。它所做的是:接受论点,然后
跳
无论在哪里,延续被创造,恢复所有的上下文,并使之成为
在我们的例子中,论点是
注意调用continuation是 跳 ,不是电话。它永远不会返回到调用continuation的地方。这很重要。 程序的工作原理如果你遵循这一点,那么不要抱太大的希望:这一部分真的是最难的。下面是我们的程序,删除变量声明,因为这是伪代码:
第一次命中第1行和第2行时,它们现在很简单:获取延续,调用函数(arg),print
下一步,我们调用延续
显然,这很难理解,更难解释。最好的方法是在一个调试器中一步一步地完成它,这个调试器可以表示continuations,但是唉,我不知道有什么。我希望你过得愉快;我当然有。 |
|
|
3
6
先思考,最后可能的答案。 我认为代码可以这样重新编写:
或者使用一些额外的显示语句来帮助查看发生了什么:
或者像这样:
这可能不对,但我要试一试。
我认为关键的一点是,一个'被调用'的继续将堆栈返回到某个先前的状态-就好像什么都没有发生一样。当然它不知道我们通过显示
我们从这里开始。
第一次通过你得到
(二者)
现在
我们知道什么
现在
因为堆栈恢复到
我们知道什么
我们知道什么
我们知道什么
因为堆栈恢复到
我想我们现在有了一个模式。
谢谢你的提问。 |
|
|
4
6
阴阳拼图是用方案写的。我想你知道Scheme的基本语法。
解释
|
|
|
5
1
正如另一个答案所说,我们首先简化
接下来我们需要计算出评估顺序。为了清楚起见,我将引入一个“步骤表达式”,它使每个求值步骤都显式化。首先让我们问一下:上面的函数需要什么?
第一步是计算
粗略地说,
一旦我们有了
详细的评估顺序(这里的lambda位于
(记住,在评估
|
|
|
6
1
这是困惑大师大卫·马多尔的一个老谜题 创建Unlambda。这个难题已经讨论了好几次了 次。 泰勒·坎贝尔提出了一个很好的解决方案: https://groups.google.com/d/msg/comp.lang.scheme/pUedvrKYY5w/uIjTc_T1LOEJ David Madore(1999)的原始帖子: https://groups.google.com/d/msg/comp.lang.scheme/Fysq_Wplxsw/awxEZ_uxW20J |