簡體   English   中英

Haskell代碼中的參數數量和類型不同,為什么?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM