簡體   English   中英

Haskell:“的多個聲明<function name> “……?

[英]Haskell : multiple declarations of “<function name>” …?

嘿伙計們,這是我的代碼,我收到了“多個鏡像聲明”的奇怪錯誤。 在此之前我還有其他功能,但它們都沒有命名為 mirror ... 有什么想法嗎?

mirror :: BinTree a -> BinTree a
mirror = undefined
mirror (Node tL x tR) = Node x mirror tR mirror tL

函數的多個定義必須在等號左側具有相同數量的參數。 從理論的角度來看,這不是必需的(注意:其中一個定義當然可以是 lambda 或返回另一個函數),但人們似乎喜歡它,因為這樣的定義通常表明存在錯誤。

具體來說,你有一個零參數的定義:

mirror = undefined

一個定義和一個論點:

mirror (Node tL x tR) = Node x mirror tR mirror tL

你可能想要:

mirror _              = undefined
mirror (Node tL x tR) = Node x mirror tR mirror tL

這不是這個特定示例的問題,但由於這是 Google 上“多重定義 Haskell”的第一個結果,我想我應該貢獻我的問題所在:

如果您使用帶有某些參數的模式匹配多次定義函數,則所有定義都必須是連續的。 如果它們之間有其他代碼,則將它們視為單獨的定義。

實施例:以下是無效的,因為定義b除法的定義a

frobnicate :: Bool -> String
frobnicate True = "foo"
b = "bar"
frobnicate False = b

第 2 行和第 3 行具有沖突類型:您已將mirror定義為常量undefined ,然后嘗試將其定義為單參數函數。 刪除第 2 行應該可以解決問題; 不清楚你為什么寫它。

您對mirror定義有沖突。 第一條,

mirror = undefined

是一個包羅萬象的,所以定義被編譯器認為已經完成。 然后考慮下一個子句開始一個新的定義。 您應該刪除undefined行。

暫無
暫無

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

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