如果值适合数独格式,我想形成一个 Bool
列表。即 Nothing
或 Just x
其中 (1 <= x
<= 9)。下面是我的代码:
import Data.Ix
import Data.Maybe
isSudokuValues :: (Ix a, Num a) => [Maybe a] -> [Bool]
isSudokuValues list = map (maybe True inRange(1, 9).fromJust) list
最佳答案
我认为你犯了两个错误:
maybe
具有以下签名:
b -> (a -> b) -> Maybe a -> b
所以你应该使用:
map (maybe True $ inRange (1,9)) list
不能使用 fromJust
,因为那时 maybe
可以在 a
上工作(而不是 Maybe a
,此外,maybe
的任务之一就是允许安全的数据处理(这样您就不必担心值是否为 Nothing
。
一些 Haskell 用户还考虑 fromJust
to be harmfull : 不能保证一个值是 Just
,所以即使你设法让它与 fromJust
一起工作,它也会在 Nothing
上出错,因为 fromJust
无法处理这些。 全面编程 是大多数 Haskell 程序员的目标之一。
演示(使用ghci
):
Prelude Data.Maybe Data.Ix> (map (maybe True $ inRange (1,9))) [Just 1, Just 15, Just 0, Nothing]
[True,False,False,True]
Prelude Data.Maybe Data.Ix> :t (map (maybe True $ inRange (1,9)))
(map (maybe True $ inRange (1,9))) :: (Num a, Ix a) => [Maybe a] -> [Bool]
关于haskell - 如何使用 maybe 检测数独值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33032501/