语言与quote`-`eval`的上下文等价性是微不足道的吗?


13

在[1]中,米切尔·旺德(Mitchell Wand)证明了在纯lambda演算中添加fexprs会使语境对等理论变得微不足道,这意味着如果两个词是 -congruent,则它们在语境上是等同的。在探索相关工作时,他认为“我们的结果扩展了对阿尔伯特·梅耶[2]的古老观察,并使得上下文对等变得微不足道”。但是参考[2],只能找到Meyer的以下陈述:αevalquote

我第一个想到的是与语言quote- eval功能,如LISP [3]有语法和可执行的对象之间没有区别类型。实际上quote- eval在LISP中看起来已经足够安全了,因为尽管从quote句法上来说cond,它看起来像是一个真正的运算符,例如say ,但它实际上并不像一个运算符(它只有在解析时有行为,在运行时才有行为,例如,一个人不能通过quote作为过程的参数)。不过,我还没有看到令人信服的示例,其中quote- eval功能值得。

不管这些注释中有哪一个小缺陷,都可能误导读者以为cond可以将其作为参数传递给过程。如果我理解正确,那么迈耶所说的“ quote- eval似乎足够安全”意味着quote- eval尽管他没有提供证明,但可能不会使方程式理论变得微不足道。

编辑:

正如Martin所建议的那样,由于所有三篇论文都引用了有关LISP家庭语言的内容,因此让我们将这个问题放在相同的背景下。 在地球上,带有quote- 的语言eval(特别是LISP)的上下文对等是否微不足道?

[1]米切尔· 德(Mitchell Wand),《 Fexprs理论不重要》。Lisp和符号计算10(3):189-199(1998)。

[2] Albert Meyer, “正式软件开发的编程逻辑研讨会”之。1984年

[3] John McCarthy,符号表达式的递归函数及其通过机器的计算,第一部分。1960年4月ACM的通讯。


1
我建议考虑是否可以使这个问题更具体:有多种方法可以实现类似eval / quote的构造,并且在设计此类计算的上下文等效项时有多种选择。最近一个有趣的相关出版物是Taha Inoue的多阶段程序推理
Martin Berger

1
关键区别在于CTMP(编译时元编程,例如Template Haskell,Lisp / Scheme / Racket和Converge)与RTMP(运行时元编程,例如Javascript的eval或MetaOCaml)之间的区别。 。这里是一个概述演讲中,我做了几个月前,在这个问题上,很浅恐怕关于上下文等价,很少工作已经完成,大多拥有以编程的元编程支持的流体状态。
马丁伯杰

1
@ plmday:顺便说一句,理想化的编程语言Wand在《The Fexprs Is Trivial》中的形式化与元编程Lisp完全不同。前者是RTMP,后者(取决于具体实现)不是。
Martin Berger

1
@MartinBerger:您能以pdf格式发布您的演讲吗?
戴夫·克拉克

1
@ Dave Clarke,当然,在这里!欢迎反馈。
Martin Berger

Answers:


2

首先,这完全取决于您要采用的上下文集。如果(quote [])是上下文,那么上下文对等就是句法对等。

传统上,上下文对等的上下文被视为可以出现“表达”的上下文,无论该表达具有何种语言含义。这会排除诸如之类"[]"的上下文,其中上下文会将其参数放在字符串文字中。IIRC在Quine最初描述参照透明性时也排除了此类情况。

从这个角度来看,我认为这(quote [])也不是一个背景。相反,上下文是表达评估可能发生的地方,例如在函数主体中或在应用程序的参数中。

潜在地存在问题,这意味着在具有宏的Lisp程序(或Racket或Scheme程序)中,您不知道上下文是什么,直到您运行可能终止的宏扩展过程为止,因为您甚至不知道表达式的位置是。您是否认为这是一个问题,主要是哲学问题,而不是技术问题。


我不认为这是要排除的一种方式(quote []),而不是一厢情愿的想法,作为一个背景:驳回治疗的想法'datum是语法糖(quote datum),那么'[],因为"[]"不再是一个方面。quote无论如何,方案宏都被遮盖了。

我不明白你的评论,@ day。为什么'datum和之间的关系会发生(quote datum)变化?
Sam Tobin-Hochstadt 2014年

如果quote是一种语言结构并且'datum对它不屑一顾(quote datum),人们将更有可能认为这(quote [])是一种环境。如果我们quote从核心语言中删除,但支持字面'datum语法,那么他们将不太可能争辩,因为众所周知,类似"[]"情况并非上下文。

@day,这是一个误会。“上下文”没有正确的定义。只是不同的上下文支持上下文等效的不同概念。例如,空格在"[]"上下文中在语义上很重要,但在(quote [])上下文中不重要。“人民”可能争论的既不在这里也不在那里。
Sam Tobin-Hochstadt 2014年

我同意没有正确的上下文定义。但是,有一种基于抽象语法的传统定义,即Wand在他的论文中使用的定义和Meyer在他的文章中使用的定义,以质疑Lisp的上下文等效状态。您建议的是用评估上下文替换传统的上下文定义。我建议的是保留上下文的传统定义,quote从抽象语法中删除,但支持(空格)引号的(具体)文字语法。从我的看到,两种方式都导致原始问题的“否”。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.