haskell - 如何使用 maybe 检测数独值

标签 haskell sudoku option-type

如果值适合数独格式,我想形成一个 Bool 列表。即 NothingJust 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/

相关文章:

string - Haskell 字符串中的换行符?

c++ - 确定数独板是否有效

dictionary - 在 Kotlin 中将 `Throwable?` 映射到 `Result<Unit>`

Haskell 仆人(客户端): UnsupportedContentType error due to weird Accept header

haskell - 不变性是否可以提高延迟评估语言中的 GC 性能?

haskell - 现实世界 Haskell 第 3 章练习 : Binary Tree with 1 value constructor - follow up

c++ - 6x6 数独游戏,找出你所在的部门

java - 如何将字符串中的值分配给二维数组?

ios - guard 和 invert if 有什么区别

android - 带有可选 id 的 @OnClick 数组 (ButterKnife)