我剛開始工作在我的第三個作業上,我遇到了另一個noob錯誤,我似乎無法自行解決。守衛初學者錯誤? - 哈斯克爾
我們要編寫一個Sudoku求解器,而且我正在編寫一個函數,它將決定我的Sudoku中的元素是否是正確的類型。它們是Maybe Int類型(Just Int或Nothing)。
下面是代碼中的相關部分:
data Sudoku = Sudoku [[Maybe Int]]
deriving (Eq, Show)
validValue :: Maybe Int -> Bool
validValue Nothing = True
validValue (Just n) = True
checkEveryElement :: Sudoku -> Bool
checkEveryElement (Sudoku (x:xs))
| and $ map $ validValue $ concat (x:xs) == True
的獨本身是由9個元素,其中每個元素是它由9個元件自身的列表的列表表示。所以上面列表中的x(總列表的頭部)實際上是9個元素的列表。
我只開始學習如何編程這些過去五週,所以請耐心等待。 :) 我不知道我使用和正確。編譯時得到的錯誤在上述代碼段的最後一行。
謝謝!
編輯:我忘了實際的錯誤...'可能是不正確的縮進或不匹配的括號。'
在警戒表達式中,您使用單個等號指定結果,而不是double。這就是至少這個具體錯誤的原因,ghc只是看到比較,並想知道結果應該是什麼:) – ollanta 2014-09-28 15:15:43
我想你需要一個():(和$ map $ validValue $ concat(x:xs))== True – osager 2014-09-28 15:17:39
爲了擴展@ ollanta的評論,你並不需要'== True':'和'已經評估爲'Bool',所以不需要用'True'來測試相等性。一種解決方案是將'=='更改爲'=',但如果你想對守衛進行痛苦的明確,你可以寫'== True = True'。 – crockeea 2014-09-28 15:17:40