我是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