簡體   English   中英

缺點和: - :在Haskell中意味着什么?

[英]What does Cons and :-: mean in Haskell?

LYAHFGG中 ,有一章說該列表定義為:

data List a = Cons a (List a) deriving (Show, Read, Eq, Ord)

我理解除了缺點之外,大多數這意味着什么。 當我嘗試:t Cons:i Consghci :i Cons我得到一個不在范圍內的錯誤。 在本章后面,它還討論了: - 和它與Cons的相同之處

infixr 5 :-:  
data List a = Empty | a :-: (List a) deriving (Show, Read, Eq, Ord)  

但我真的不明白這是什么:-:意味着。

在另一個資源中,在有關數據類型的部分中,它們定義以下數據類型:

data Expr = X
      | Const Int
      | Expr :+: Expr
      | Expr :-: Expr
      | Expr :*: Expr
      | Expr :/: Expr
      | IfZero Expr Expr Expr
      deriving (Eq, Ord)

其中IfZero pqrif p == 0 then q else r相同, if p == 0 then q else r 這是一回事嗎? 我很困惑這兩個: s是什么意思,如果它是強制語法或只是樣式選擇。

 data List a = Cons a (List a) deriving (Show, Read, Eq, Ord) 

我理解除了缺點之外,大多數這意味着什么。 當我嘗試:t Cons:i Consghci :i Cons我得到一個不在范圍內的錯誤。

您需要使用data聲明加載Haskell源文件,然后才能在范圍內使用Cons 或者,您也可以直接在GHCi中輸入該data行。

對於嚴肅的代碼,如果將其放入文件並加載它會更容易。 這是因為學習過程通常涉及稍微修改文件,重新加載文件,在GHCi中嘗試一些測試,再次修改文件等。在GHCi中執行此操作非常麻煩。

無論如何, Cons只是構造函數名稱 - 它是一個任意名稱。 您可以使用data List a = Foobar a (List a) ....並將其命名為Foobar ,如果您願意的話。 但是, Cons是一個歷史名稱,源自Lisp。

:-:是構造函數的另一個任意名稱,除了它可以使用中 即,而不是Cons 1 someList可以寫1 :-: someList

:-:只是數據構造函數的中綴名稱。 你可以看到data聲明等同於

data List a = Empty | (:-:) a (List a)

從語義上講,使用(:-:)Cons之間沒有區別,但閱讀起來要好得多

1 :-: 2 :-: 3 :-: 4 :-: Empty

比任何一個

Cons 1 (Cons 2 (Cons 3 (Cons 4 Empty)))

要么

1 `Cons` (2 `Cons` (3 `Cons` (4 `Cons` Empty)))

暫無
暫無

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

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