gpt4 book ai didi

scheme - 为什么延续过去的风格

转载 作者:行者123 更新时间:2023-12-03 11:28:41 25 4
gpt4 key购买 nike

在Kent Dybvig(第四版)The Scheme Programming Languagesection 3.4中,他非常清楚地描述了延续传递风格是什么。由于这个原因,他给出了两个原因:

  • 将多个结果传递给其延续,因为实现延续的过程可以采用任意数量的参数。
  • CPS还允许过程采用单独的延续...,该延续可以接受不同数量的参数。

  • 由于第一个原因也可以使用 values过程完成,第二个原因可以使用 case-lambda完成,因此我不清楚使用延续传递样式的优势。有人可以向我展示一些示例,这些示例适用于哪些地方应该使用延续传递样式,哪些地方可以使代码更好,更清晰等?

    最佳答案

    Dybvig使用本节中的显式延续来激发将call/cc作为语言的一部分。要点在本节末尾提到,他提到如果不编写代码就需要对所使用的所有代码(包括您调用的函数)进行全局转换。因此,在Scheme中,您通常使用宏来构建自己的构造,而延续是这些有用的构造之一-但您不能通过宏来实现它们,因为它们仅实现局部转换。

    但是直接使用CPS样式仍然很有用:例如,正如他提到的那样,您可以编写一个具有多个延续的函数,可能具有不同的误差-例如解析函数,该函数接收单输入函数以发送解析失败时,将值解析为,并调用null失败函数(该函数可能会因错误或回溯而中止,并尝试使用其他解析规则)。另一个可能的用法是,当您想精确控制继续执行的内容时,而不是让call/cc捕获整个上下文。

    还有一种明显的情况是,使用没有一流延续性的语言编写代码,这使CPSed代码成为您的唯一选择。一个例子就是很多使用IO的node.js程序,这迫使您用显式的CPS编写代码。

    关于scheme - 为什么延续过去的风格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8544127/

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