Answers:
减少策略是Lambda上的一项功能,可从所有可能的redex中选择一个redex(可还原表达式)-取决于您定义为redex的内容。
非正式地,评估策略是一种语言评估其参数的顺序。语言传递给函数的是参数传递策略。
要了解这些之间的联系,请研究Plotkin关于按名称调用,按值调用和lambda演算的论文。他明确指出,您要根据所需的评估顺序选择不同的AXIOMS。对于Cb名称,您想要旧的beta公理,对于cb值,您想要Beta值公理。如果这样做,则所有的元定理对两种口味的计算都相同。后来,我(与许多合作者)表明,这个想法可以推广到PL世界研究的所有方面。
都是技术性的,不是可以解释的诗歌。只需阅读就可以了。
-Matthias Felleisen
ps我要说的是,我认为人们可以更轻松地从Redex书中的第一部分了解Plotkin的论文。但是,是3倍。
“减少策略”维基百科文章完全摘自匿名IP对“评估策略”文章进行的特定编辑。
从某种意义上说,我怀疑该领域的相对较少的人会自发给出答案,如果您问他们“您是否会区分“减少策略”和“评估策略”这两个名字?我只是从Matthias Felleisen那里听到这句话的,他坚信这种区别的重要性-我认为其他人也有这种观点,他们有机会抽出时间与他详细讨论这些观点。
我目前对这一点的理解(但我尚未完全研究其技术细节)涉及以下方面:这是关于您使用的是“大步长”还是“小步长”语义-这种区别是标准且易于理解的由该领域的每个人。小步语义定义了还原的一个原子步,结果通常还是可简化的。大步语义定义了一个简化的“大”步骤,从开始程序一直到其值(如果您的语言除了返回值之外还具有其他可观察的效果,例如输入/输出或输出,还有其他更丰富的“答案”类型)。可变状态)。
如果同时定义了大步关系和小步关系,则可以检查大步语义是否包含在小步关系的传递闭包中,并且小步关系不会归结为除通过大步关系达到的那些,如果定义了大步减少,则发散。这是两者之间的预期相干关系。
我认为可以用现代术语或多或少地描述本文的措辞,因为“评估策略是大步关系”,“减少策略是小步关系”。请注意,“减少策略”文章中的讨论主要是关于1973年至1991年之间的文章和研究(更重要的是,他们在阅读和写作过程中形成的雄辩观点),那时这些概念刚刚诞生,并且可能不像今天这样容易理解。(1987年,Kahn强调了大步语义,而关于小步语义的最重要著作之一是Wright和Felleisen,1992年)
对于为什么Felleisen坚持这种差异的重要性(这就是为什么除了“小步长vs.大步长,嗯”之外,还有更多其他原因)的观点,我目前的理解是:提出的一点是,应该将小步语义视为实现细节。的根据这个论点,语义是将每个程序映射到其值/答案的抽象函数,其余的是旨在对其进行逼近的实现设备(或由该语义引起的等价原因)。今天,当我们大步前进时,我们想到的是句法性质的推理规则系统,但是上面讨论的“归约策略”实际上是其作为映射的抽象。(我认为这在实践中并没有为该概念提供更多的表现力或力量,但是使它更加抽象。)
因此,我认为这个Wikipedia页面和Matthias Felleisen所说的是这样的:“以您喜欢的任何方式定义评估,但最终,重要的是程序如何映射到它们的值/答案/行为,这就是所谓的“操作语义”和推理依据。”
请注意,这种立场在某种程度上违背了“操作语义”和“指示语义”之间的当前区别(我认为这是共识,但可能是我的文化偏见),前者在本质上被认为是句法上的(定义为归约关系),后者的典型特征是计算上等效的程序具有完全相同的符号(因此,该符号忽略了实际的计算机制)。在后一种观点下,文章和我在上面的解释中提议的“评估策略”或“操作语义”被认为是一种指称语义-但可以接受的是比大多数更具体的性质:值/答案/行为比许多语义域更接近句法对象。
参考文献:要理解这种观点,请回到它的原始资料来源,这是Gordon Plotkin在1973年发表的文章。您可能会很幸运,尝试在维基百科上引用的后一篇文章;例如,我发现1991年Crank和Felleisen撰写的“参数传递和Lambda微积分”在前几页中非常清楚地概述了它们在此问题上的立场。