[英]Number of arguments in Haskell code and type is different, why?
任何人都可以解釋下面的代碼,請逐步執行。 我知道這是定義一個函數,它的輸入,但到底是什么(+)
做的,為什么有三種不同的Int
s中plus
四 Int
S IN plusplus
的類型,而它好像只有3個參數 plusplus
“的代碼?
plus :: Int -> Int -> Int
plus = (+)
plusPlus :: Int -> Int -> Int -> Int
plusPlus a b c = a + b + c
+
是加法運算符。 將運算符放在括號中(如(+)
是指加法函數本身,而不是使用+
在位置上將兩個數字相加。 基本上,這是:
plus = (+)
等效於:
plus a b = a + b
無論哪種方式,它都將plus
定義為+
的同義詞。
在Haskell中, ->
用於分隔參數的類型以及返回值 。 所以,
plus :: Int -> Int -> Int
是一個需要兩個Int
並返回一個Int
的函數。
plusPlus :: Int -> Int -> Int -> Int
是一個需要三個Int
並返回一個Int
的函數。
參數和返回值的語法相同的原因是由於currying 。
說真的,
plus :: Int -> Int -> Int -- ~ Int -> (Int -> Int)
是接受一個Int
並返回一個接受一個Int
並返回一個Int
的函數。
plusPlus :: Int -> Int -> Int -> Int -- ~ Int -> (Int -> (Int -> Int))
是一個接受一個Int
的函數,返回一個接受一個Int
的函數,並返回一個接受一個Int
並返回一個Int
的函數。
實際上,將Haskell函數稱為采用多個參數很方便。 但是從技術上講,Haskell函數始終采用一個參數。 參數類型在->
的左側,返回類型在->
的右側,但是返回類型本身可能是另一個函數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.