我是 Haskell 的新手,盡管我已經完成了基本操作,但我仍然不明白為什么以下結果給出了 4:
d f x = f x x
main = print ((d (.)) (d ( )) 1)
uj5u.com熱心網友回復:
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\x y -> x (x y)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
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/316799.html
標籤:哈斯克尔
上一篇:構建無限串列的排序無限串列
