簡體   English   中英

Haskell - 定義函數

[英]Haskell - defining functions

我是編程和Haskell的新手。 我無法理解如何定義函數。 假設我想要一個函數,它將返回列表[b]的位置a中的元素。 對於特定的a[b],我可以在解釋器中執行此操作:

Prelude> [2, 3, 5, 6] !! 1
Prelude> 3

但是如果我嘗試在解釋器中或在加載的文本編輯器中創建函數,我會遇到麻煩:

Prelude> let getElement a [b] = [b] !! a 
Prelude> getElement 1 [2, 3, 5, 6]
***Exception: <interactive>:17:5-27: Non-exhaustive pattern in function getElement

讓getElement a [b] = [b] !! 一個

你的函數接受一個Int類型的參數a ,因為(!!)第二個參數是一個Int,而[b]模式匹配一​​個元素的列表。

看起來你試圖告訴編譯器第二個參數應該是一個列表。 為此,您通常使用類型簽名。

在文件中:

getElement :: Int -> [b] -> b
getElement a bs = bs !! a

這種類型的函數被認為是部分函數,​​因為您可以給它一個整數,導致函數失敗並拋出異常,例如負數或嘗試訪問大於列表的索引。 現實世界中的這一章 Haskell有一些關於部分函數的信息。 編程指南頁面上的Haskell wiki也有一些建議

您可能希望查看安全包以及它們如何定義headMay以進行總體而非部分實現。

編輯: b改為按照下面的Rein Henrichs推薦的bs ,因為他指出它確實使它更容易閱讀,並且是一個相當常見的習語。

暫無
暫無

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

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