如何理解使用(.)操作符作为参数的表达式?



我是Haskell的新手,即使我已经做了基本的,我仍然不明白为什么下面的结果给出了4:

d f x = f x x
main = print ((d (.)) (d (+)) 1)

d (.)将产生一个函数x -> (.) x x,该函数以一个函数x为输入,因此将取一个变量y并应用x两次,因此x y -> x (x y)

d (+)表达式。d (+)还是一个类似于z -> (+) z z的函数,或者不那么详细的z -> z + z,因此这个函数接受数字z作为输入,并返回z + z

我们使用这个函数z -> z + z作为x y -> x (x y)表达式中的变量x,因此d (.) (d (+))相当于y -> (z -> z + z) ((z -> z + z) y)

最后,我们使用该函数并将1作为参数,结果是(z -> z + z) ((z -> z + z) 1),相当于:

(z -> z + z) ((z -> z + z) 1)
→ (z -> z + z) (1 + 1)
→ (z -> z + z) 2
→ (2 + 2)
→ 4

最新更新