[英]Beginner error with guards? - Haskell
我剛開始從事第三次學校作業,卻遇到了另一個新手錯誤,我似乎無法自行解決。
我們要編寫一個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個元素的列表。
在過去的五個星期中,我才剛剛開始學習如何編程,所以請多多包涵。 :)我不確定我是否已正確使用。 我在編譯時遇到的錯誤在上述代碼的最后一行。
謝謝!
編輯:我忘記了實際的錯誤...“可能是縮進不正確或括號不匹配。”
您在那里需要一個等號 ,而不是compares_equal號。 您的警戒表達式中還會有一個額外的$
。 它應該是
checkEveryElement :: Sudoku -> Bool
checkEveryElement (Sudoku (x:xs))
-- | and $ map $ validValue $ concat (x:xs) == True
| and $ map validValue $ concat (x:xs) = True
-- ^^^ ^^^
但根據您當前的定義,它將始終為True
。 如果帶有==
符號,則它是所有保護的一部分,該函數的主體缺失。
上面寫的慣用方式是
checkEveryElement (Sudoku (x:xs)) =
-- and $ map validValue $ concat (x:xs) -- or,
all validValue $ concat (x:xs)
沒有警衛。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.