如何让语言同时提供按名称调用和按值调用?

时间:2011-02-27 11:24:18

标签: programming-languages

是否可以使用语言提供按需调用(CBN)和按值调用(CBV)评估策略?我的意思是不修复它并在另一个模拟,但让用户在需要时选择哪个。例如,让该语言具有eval函数,如在Scheme中可用,它可以接受来自用户的另一个参数,指定他想要的评估策略。

1 个答案:

答案 0 :(得分:6)

在一种语言实现中组合按需调用(懒惰)和按值调用(严格)当然是可能的,只要一个人注意避免使副作用变得懒惰并使分歧计算严格。< / p> 在惰性(CBN)函数语言中使用

Strictness analysis来检测何时可以使用CBV策略安全地评估函数。 CBV评估通常更快,但对非严格函数使用此评估策略会改变程序的语义。

Wadler描述了如何在函数式语言中组合惰性和严格计算。

最终thread的lambda也解决了这个问题。

Scala有一个关键字lazy,用于说明某些计算是懒惰地执行的。其他语言也有类似的结构。