我在 Haskell 中生成一个州的邻居。
状态是行列表。这些动作可以在一行上独立执行。对每一行调用一个函数,该函数返回该行的一组邻居。
这是一个示例(为简单起见,我将这些行设为字符):
state = ['a', 'b', 'c']
rowNeighbours a = ['x', 'y']
rowNeighbours c = ['p', 'q']
rowNeighbours _ = []
neighbours
应该调用rowNeighbours
每一行并生成一个状态列表[['x', 'b', 'c'], ['y', 'b', 'c'], ['a', 'b', 'p'], ['a', 'b', 'q']]
。
我无法生成此列表。以下是我提出的解决方案。
neighbours state =
[ [x, y, z] | x <- rowNeighbours (state !! 0), y <- [state !! 1], z <- [state !! 2] ] ++
[ [x, y, z] | x <- [state !! 0], y <- rowNeighbours (state !! 1), z <- [state !! 2] ] ++
[ [x, y, z] | x <- [state !! 0], y <- [state !! 1], z <- rowNeighbours (state !! 2) ]
它可以工作,但我的实际问题有“6”行,所以这变得非常不雅,看起来像是一种非功能性的做事方式。我将不胜感激有关如何执行此操作的任何指示,谢谢。