[英]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.