我刚开始工作在我的第三个作业上,我遇到了另一个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