如何理解Haskell中(.)运算符作为参数传入的表达式的运行结果
Haskell代码运行结果推导
首先给出你提供的代码:
d f x = f x x main = print ((d (.)) (d (+)) 1)
我们可以逐步代入化简表达式((d (.)) (d (+)) 1):
- 第一步:明确
d函数的作用:接收一个二元函数f和参数x,返回f以x作为两个输入参数的求值结果,即d f x = f x x。 - 第二步:化简
d (.):将(.)(函数组合运算符)代入d的第一个参数,可得d (.) = \x -> (.) x x = \x -> x . x,这个函数的作用是把输入的函数和自身做组合。 - 第三步:计算
(d (.)) (d (+)):把d (+)作为参数传给上一步得到的函数,得到结果为(d (+)) . (d (+)),也就是两个d (+)函数的组合。 - 第四步:根据函数组合的规则
(f . g) v = f (g v),原表达式可以改写为d (+) (d (+) 1)。 - 第五步:计算内层的
d (+) 1:代入d的定义得(+) 1 1 = 2。 - 第六步:计算外层的
d (+) 2:代入d的定义得(+) 2 2 = 4,就是最终的运行结果。
内容的提问来源于stack exchange,提问作者user13786943
相关产品推荐
相关产品推荐

