簡體   English   中英

如何使用haskell類型?

[英]How to use haskell types?

一個非常簡單的問題,我不能為我一生使用Google信息:(

我有以下幾種類型:

type NI = Int
type Age = Int
type Balance = Int
type Person = (NI, Age, Balance)

如果一個人的年齡超過65歲,如何創建一個返回true的函數? 我試過了:

retired :: Person -> Bool
retired p = p >= 65

它顯然不起作用,我意識到即使嘗試了它。 我對如此簡單的事情感到困惑。

由於Person是一個元組,因此您應該像這樣對它進行模式匹配:

retired (_,age,_) = age >= 65

它應該工作

type X = Y定義類型別名 在此示例中, X定義為與Y相同。 因此, retired :: Person -> Boolretired :: (Int, Int, Int) -> Bool

然后我們可以問一個問題:我們如何獲得一個人的年齡? 好吧, Person(Int, Int, Int) ,我們知道元組的第二個元素是人的年齡。 因此,一個等效的問題是:如何獲得三元組的第二個元素?

在Haskell中,這是通過解構元組來完成的,這與構造元組相反。 構造元組的一個示例是x = (1,2,3) 為了解構元組,我們使用類似的表示法,但反過來: (a,b,c) = x 這與(a,b,c) = (1,2,3)相同,並且與三個賦值a = 1; b = 2; c = 3 a = 1; b = 2; c = 3 a = 1; b = 2; c = 3

Haskell允許您將此解構符號用於函數參數。 因此, retired p = e可以寫成retired (ni, age, balance) = e ,回想起Person是一個三元組。 現在很簡單, e應該是age >= 65

為了進一步詳細說明, retired (ni, age, balance) = e等於retired p = let (ni, age, balance) = p in e 知道這很有用,因為這樣功能應用程序會更清晰。 retired x成為let (ni, age, balance) = x in [x/p]e中的[x/p]e ,其中[x/p]e表示“用x代替e中的 p ”。


另一種方法是使用記錄符號定義數據類型。

data Person = Person { ni :: Int, age :: Int, balance :: Int }

這定義了一個稱為Person的新類型,並且與類型(Int, Int, Int)組不同。 另外,它定義了三個投影函數ni :: Person -> Intage :: Person -> Intbalance :: Person -> Int

現在,如果我們實現retired :: Person -> Bool我們可以做到: retired p = age p >= 65 ,或采用無點形式retired = (>= 65) . age retired = (>= 65) . age

要重新連接第一種方法,還可以使用解構嗎? 絕對。 將Person構造為x = Person mnp ,因此類似地可以將其構造為Person abc = x 因此, retired另一個定義是retired (Person nab) = a >= 65

暫無
暫無

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

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