完全迷失了以下回傳函式的示例
getAddFunc :: Int -> (Int -> Int)
getAddFunc x y = x y
adds3 = getAddFunc 3
fourPlus3 = adds3 4
函式簽名Int -> (Int -> Int)告訴我它接受一個Int和輸入的函式Int -> Int我對函式定義很困惑x y = x y,看起來它需要 2 個整數 x 和 y 而不僅僅是 1 個整數!這里x和y是什么意思?我很困擾。
有人可以幫我弄這個嗎?
uj5u.com熱心網友回復:
您正在查看咖喱函式。編碼
getAddFunc x y = x y
相當于
getAddFunc x = \y -> x y
即,x作為引數并回傳一個函式y。
這個也可以寫
getAddFunc = \x -> \y -> x y
或者
getAddFunc = \x y -> x y
在 Haskell 中,從技術角度來看,每個函式都只接受一個引數。但是,在接受該引數后,它可以回傳另一個將“第二個”引數作為輸入的函式。這種機制也可以解釋為一個帶有“兩個”引數的函式。這以類似的方式進一步推廣到 N 個引數。
uj5u.com熱心網友回復:
Haskell 中的所有函式都采用一個引數。確實,函式:
getAddFunc x y = x y
相當于:
getAddFunc x = \y -> x y
并:
getAddFunc = \x -> \y -> x y
因此,您構造了一個接受一個引數的函式x,并將它映射到一個接受一個引數y并將回傳的函式x y。
因此,這意味著這getAddFunc 42是一個接受引數并將其添加 42 的函式。
該(->)型別的建構式是右結合。確實,Int -> (Int -> Int)是一樣的Int -> Int -> Int。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/374166.html
上一篇:三對對點免點方式
下一篇:沒有sortBy的元組排序串列
