【问题标题】:Haskell: Call a function with each element in a listHaskell:使用列表中的每个元素调用一个函数
【发布时间】:2014-06-19 18:05:12
【问题描述】:

我正在制作一个数独求解程序,我有一个potentialNbrsAt 函数,它可以获取可能位于 x y 位置的数字。

现在,我正在尝试获取列中每个潜在数字列表的交集。类似于下面的onlyOnePlaceForNbrInCol 函数。

代码:

potentialNbrsAt :: Int -> Int -> Sudoku -> [Int]
potentialNbrsAt x y sudoku = intersect rowMissingNbrs $ intersect colMissingNbrs sqrMissingNbrs
                where rowMissingNbrs = getMissingNbrs $ getRow y sudoku
                      colMissingNbrs = getMissingNbrs $ getCol x sudoku
                      sqrMissingNbrs = getMissingNbrs $ getSquare squareIndex sudoku
                      squareIndex    = 3 * (y `div` 3) + (x `div` 3)

onlyOnePlaceForNbrInCol :: Int -> Int -> Sudoku -> Bool
onlyOnePlaceForNbrInCol colIndex nbr sudoku = -- What goes here? Some pointers please???

我认为 onlyOnePlaceForNbrInCol 应该在某些时候调用 potentialNbrsAt,每个数字从 0 到 8 作为 y 的参数。告诉我如何做到这一点会有很大帮助。

【问题讨论】:

  • PS:当数字 9 或 div 运算符出现在数独求解器中时,它表明建模不足:网格没有二维 (9x9),而是四维 (3x3x3x3)。在德语中,“die Anschauung ist auch oft der Feind des Verständnisses”。

标签: list haskell functional-programming


【解决方案1】:

[ potentialNbrsAt x y sudoku | y <- [0..8] ] 呢?这将为您提供y 等值的所有结果列表。

【讨论】:

  • 没想到会这么简单。谢谢!
【解决方案2】:

因此,您正在尝试确定数字 [0..8] 中的 all 是否满足给定的谓词。

【讨论】:

    猜你喜欢
    • 2016-01-24
    • 1970-01-01
    • 2013-03-21
    • 1970-01-01
    • 1970-01-01
    • 2020-02-22
    • 2011-03-23
    • 1970-01-01
    相关资源
    最近更新 更多