我正在尝试生成一个列表,其中将包含我要解决的问题的解决方案列表。我这样做是使用列表推导,生成所有可能的组合,然后使用谓词进行过滤,以便仅包含解决方案。这是我的代码。
solveRow :: Row -> [Row]
solveRow (Row target rowCells) =
[(cellsToRow target cls) | (cls <- (cellPermutations rowCells)), (result cls)==target]
cellPermutations
返回[[Cell]]
,因此cls
应该为[Cell]
类型。当我尝试编译时,出现错误。我以为
<-
将右侧的每个元素(在本例中为[Cell]
)传递给左侧的变量。为什么我收到<-
的解析错误?
最佳答案
请勿在cls <- (cellPermutations rowCells)
前后加上方括号,这是一种语法错误。您也不需要用cellsToRow target cls
括住括号,尽管这样做不是错误。 (严格来说,您也不需要在result cls
周围加上括号,但我个人认为这些括号使它更具可读性。)因此,您的示例应为:
solveRow :: Row -> [Row]
solveRow (Row target rowCells) =
[cellsToRow target cls | cls <- (cellPermutations rowCells), (result cls)==target]
关于haskell - Haskell列表生成器中的生成器不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60034418/