2011-02-27 51 views
4

语言是否可以提供按需呼叫(CBN)和按值呼叫(CBV)评估策略?我的意思是没有修复它并模拟另一个,但让用户在需要时选择。例如,让语言有一个eval函数,如Scheme可用,它可以接受来自用户的更多参数,指定他想要的评估策略。如何让一种语言提供按名称和按值呼叫?

+1

尽管我已经提供了一个答案,但我认为如果迁移到stackoverflow,此问题可能会产生更多答案。你认为@plmday怎么样? – 2011-02-27 12:31:07

+0

谢谢,戴夫。这是个好主意。 – day 2011-02-27 13:53:32

+0

不幸的是,它没有提供任何进一步的结果(还)。 – 2011-03-01 08:58:58

回答

6

在一种语言实现中结合按需呼叫(懒惰)和按值呼叫(严格性)当然是可能的,只要注意避免使用副作用懒计算和严格分散计算。

Strictness analysis用于惰性(CBN)函数式语言,用于检测何时可以使用CBV策略安全地评估函数。 CBV评估通常更快,但对非严格功能使用此评估策略会改变程序的语义。

Wadler描述了如何结合功能语言中的惰性和严格计算。

拉姆达最终thread也解决了这个问题。

Scala有一个关键字lazy表明某些计算将被懒惰地执行。其他语言有相似的结构。