我如何误解需求评估?

时间:2016-08-04 22:44:12

标签: evaluation lambda-calculus evaluation-strategy

首先,我从未研究过这些东西或任何东西,所以我可能会问非常愚蠢的问题,我很抱歉,但请放轻松我:)

我正在实施lambda演算,并通过需求评估进行评估。我试图关注这个主题的this paper,其中相关位似乎是第28页描述的自然语义。

无论如何,我对这个评估策略的理解是,据我所知,实际的替换仅在评估变量时才会发生。抽象评估自己,因为它们是值,应用程序仅向缓存添加新条目。

但鉴于此,如何评估像

这样的术语

(λx.λy.x y) λa.a

根据链接文章中描述的自然语义,第一个评估步骤是将条目x -> λa.a添加到缓存中,并评估应用程序的lhs上的抽象主体,即λy.x y。但这是一个价值,因此评估结束。此时我们有一个未关闭的术语和一个非空堆。虽然我们确切地知道该术语应该评估为λy.(λa.a) y

我误解了什么?这在实际使用此评估策略的语言中如何工作?

1 个答案:

答案 0 :(得分:1)

你的减少是正确的。关键在于,该论文中提到的需求策略调用只是一种弱策略,因为它不会在lambda表达式下减少。这在图1中很明显,其中表达式\ x.M是一个值。

在缩减结束时,如果要显式获取lambda术语,则仍需要展开缓存(文献中经常称为环境),这相当于替换术语中缓存中的关联: / p>

                λy.x y [x -> λa.a] = λy.(λa.a) y

正如所料。