簡體   English   中英

Haskell如何評估此簽名?

[英]How does Haskell evaluate this signature?

ggt_euklid :: Nat1 -> (Nat1 -> Nat1)

我正在嘗試學習部分應用程序,我知道在這種情況下,如果省略括號,我將得到相同的結果,但是我不知道應該如何評估此簽名。

據我了解,括號表示它是一個函數嗎? 這是否意味着ggt_euklid取值Nat1並返回函數?

以下是完整的功能:

ggt_euklid x y
| x == y = x
|x>y =ggt_euklid(x-y) y 
|x<y =ggt_euklid x (y-x)

您已經正確理解了類型簽名:它接受一個參數並返回一個函數。 Haskell中的“多參數”函數就是這樣工作的:通過咖喱化。 您可以通過嘗試以下等效實現來查看實際情況:

ggt_euklid :: Nat1 -> (Nat1 -> Nat1)
ggt_euklid x = \y -> result
  where result | x == y = x
               | x > y = ggt_euklid (x-y) y 
               | x < y = ggt_euklid x (y-x)

在這里,我已經介紹了這個相當毫無意義的result變量,可以將其用作模式防護,但是想法是相同的。

是否意味着ggt_euklid取值Nat1並返回函數?

,它仍然意味着ggt_euklid需要一個類型的一個參數Nat1和返回類型的函數Nat1->Nat1 ,盡管括號去掉。

箭頭->始終是右關聯性(沒有括號時),即:

Nat1 -> Nat1 -> Nat1 

相當於

Nat1 -> (Nat1 -> Nat1)

與功能應用程序相對應的總是左關聯性。 (如果沒有括號),例如:

ggt_euklid 1 2

相當於

(ggt_euklid 1) 2

這里

(ggt_euklid 1) ~ Nat1 -> Nat1

(ggt_euklid 1) 2 ~ Nat1

所以,不管一個或兩個參數是否適用於ggt_euklid ,它總是返回類型的函數Nat1 -> Nat1首先,如果提供了第二個參數,它適用於第二個參數返回的功能。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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