SICP JS中为何是将函数应用于实参而非将实参应用于函数
关于
Apply function to arguments表述的说明 这两种说法没有本质上的对错,只是站的描述视角完全不一样:
- 你之前习惯的「把实参传递给函数」、
Apply arguments to function是日常写代码最常用的视角:开发者作为调用动作的发起方,主动把准备好的参数塞给要调用的函数,等着拿返回结果就行。这个视角下函数是参数的接收方,说法完全符合编码直觉,平时和同事交流技术用这种表述一点问题都没有。 - SICP里写的
Apply function to arguments是编程语言理论、数学领域的标准表述。从计算模型的抽象视角看,函数本质就是一套「输入值映射到输出值」的规则,「应用(apply)」这个动作的主体是这套规则本身——把规则作用在你给的输入参数上,算出最终结果,这个说法和数学里的函数表达是完全对齐的。就像数学课上学f(x)=x²的时候,老师只会说「把平方函数作用在7上得到49」,不会说「把7应用给平方函数」,后者在数学语境里本身就不符合表达习惯。
SICP本来就是讲计算本质的教材,不是教你怎么调API写业务的入门书,用和数学定义一致的标准术语,后面讲高阶函数、求值规则、解释器实现的时候逻辑才会统一。你觉得别扭纯粹是因为平时写代码很少站在形式化语义的角度想问题,两种说法对应的实际运行过程没有任何差别,只是适用的讨论场景不一样而已。
内容的提问来源于stack exchange,提问作者BeGood
相关产品推荐
相关产品推荐

