Skip to content

传值调用

Call by value · CBV

仅当实参先求值为值后才进行函数体替换的求值策略。

形式陈述

传值调用先把函数位置和实参求值为值,再执行 (λx.t)vt[x:=v]。小步语义通常用求值上下文固定左到右或其他次序。它不在函数体内部归约,直到函数被应用;对于带副作用语言,求值顺序是可观察语义的一部分。

直觉

先算出参数,再把得到的值传给函数,因此参数即使在函数体中不用,也可能被求值。

例子与边界

(λx.0)Ω 在传值下发散,因为必须先求值 Ω。同一实参只求值一次,但替换式语义需用值或环境避免重复副作用。传值不等于严格语言的所有细节:异常、短路运算和并发还需单独规则。

推论与应用

多数命令式语言和许多函数式语言采用传值;它便于栈帧、寄存器传参和效果顺序的直接实现。

参考资料
  • Robert Harper, Practical Foundations for Programming Languages, 2nd ed., Cambridge University Press, 2016,Parts I–XVIII。
  • Gordon D. Plotkin, A Structural Approach to Operational Semantics, DAIMI FN-19, 1981; reprinted 2004,Full report。