gpt4 book ai didi

function - Scheme中函数的机制

转载 作者:行者123 更新时间:2023-12-04 06:51:01 26 4
gpt4 key购买 nike

这是 Scheme 中的一个奇怪函数:

(定义 f
(电话/抄送
(λ (x) x) ) )

(((f'f)f)1)

在命令行中调用 f 时,显示的结果是 f 。
这种机制的解释是什么?...

谢谢!

最佳答案

您刚刚偶然发现了“延续”,这可能是 Scheme 中最难理解的东西。
call/cccall-with-current-continuation 的缩写,该过程所做的是将单个参数函数作为自己的参数,并使用当前的“延续”调用它。

那么什么是延续呢?这很难解释,你可能应该用谷歌搜索以获得比我更好的解释。但是延续只是一个参数的函数,它的主体代表一个值的某个“延续”。

比如,当我们有 (+ 2 (* 2 exp)) exp 是一个随机表达式,如果我们对该表达式求值,则有一个“延续”在等待该结果,这是求值继续的地方,例如,如果求值为 3,则将该值插入表达式 (* 2 3)并从那里继续下一个“继续”,或继续评估的地方,即 (+ 2 ...) .

在几乎所有编程语言的上下文中,计算继续值的位置与开始的位置相同,尽管 return许多语言中的语句是一个关键的反例,延续的位置与返回语句本身完全不同。

在 Scheme 中,您可以直接控制您的延续,您可以像在那里一样“捕获”它们。什么f毕竟,当 (lambda (x) x)用当前的延续调用,它只是评估它,所以整个函数体都是如此。正如我所说,延续本身就是函数,其主体可以看作是它们要捕获的延续,这是著名的 Scheme 设计者所展示的,即延续只是 lambda 抽象。

所以在代码中 f 首先计算它被调用的延续。然后这个延续作为一个函数被应用到 'f (一个符号)。这意味着该符号被带回到那个延续,在那里它被再次评估为一个符号,以显示它所绑定(bind)的函数,再次以一个符号作为其参数调用该函数,最终显示出来。

有点令人难以置信,如果你看过电影'primer',也许这可以解释它:

http://thisdomainisirrelevant.net/1047

关于function - Scheme中函数的机制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3128263/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com