【问题标题】:Relationship between a higher order programming language, and contuation passing style?高阶编程语言与延续传递风格之间的关系?
【发布时间】:2021-12-26 23:50:48
【问题描述】:

假设我有一个用(粗略的)BNF(使用 Lisp 表示法)定义的高阶语言:

c ::= constants
v ::= variables
e ::= c | v | (if e e e) | (e e_1 e_2 ... e_n) | (fn [v_1 v_2 ... v_n] e)

在上面,选项(e e_1 e_2 ... e_n) 表示将表达式e 应用于参数e_1e_n

是否每个用上述语言编写的程序也都隐含在“延续传递风格”中?如果不是,有什么区别?

【问题讨论】:

    标签: theory bnf continuation-passing


    【解决方案1】:

    不,在我看来

    CPS (Continuation Passing Style) 要求函数调用的最后一个参数本身就是一个函数(通常只有一个参数),它将作为主函数的“返回”执行(如果你愿意的话,一个回调) .

    您的问题中显示的语言的语法允许其他与函数不同的东西作为参数传递 - 即变量和常量 - 在这种情况下,并非每个函数调用都有最后一个参数,它也是一个函数.因此,可以用这种语言编写 CPS 中没有的程序。

    但是,另一方面,是的,您可以使用这种语言来实现连续传递样式中的调用。

    【讨论】:

    • 感谢您的回答!我想知道变量/常量是否只是一个返回自身的函数。我可以用更冗长的形式写成fn [v] v。我想CPS也有这个?毕竟,在某些时候,您希望您的计算返回一些结果,而不是永远继续下去?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-24
    • 2012-04-19
    • 2011-06-30
    • 2014-02-04
    • 2011-05-30
    • 2016-12-01
    • 1970-01-01
    相关资源
    最近更新 更多