簡體   English   中英

Haskell 中否定文字的模式匹配

[英]pattern matching of negative literals in Haskell

我試圖理解為什么在 Haskell 中禁止 n + k 模式。 StackOverflow上的一篇著名文章給出了 function 的示例,如下所示:

f 0 = 0
f (n + 5) = 5

Haskell 在匹配 f 1、f 2、f 3、f 4 時顯示錯誤。我不明白為什么 (-1) 不能與 n 匹配。 首先,我認為整數只包含非負文字 (0,1,..),但 Haskell 對Int類型的定義包括負文字。

為什么不能匹配-1? 這就是 n+k 模式的定義方式,大概是因為它在當時看起來是個好主意。 對自然數使用歸納法是很自然的,那么為什么不定義我們很酷的 n+k 模式來為自然數工作呢? 來自Haskell 報告

如果 x >= k,則將 n+k 模式(其中 n 是變量,k 是正 integer 文字)與值 v 匹配成功,導致 n 綁定到 x - k,否則失敗。 同樣,函數 >= 和 - 被重載,具體取決於模式的類型。 如果比較發散,則匹配發散。

您發現這令人驚訝的事實可能是刪除 n+k 模式的原因之一。 另一個是不需要它們:您可以輕松地將任何 n+k 模式轉換為不使用此功能的模式。

暫無
暫無

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

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