Haskellでどうやってそれを作ることができるのかわかりません。たとえば、私はそのような行列を持っています
[[1,2],[3,4]]
そして、この行列の各要素のすべての可能な近傍を含むリストのリストを生成したいと考えています。
期待される結果は次のとおりです。
[[1,2],[1,3],[1,4],[2,1],[2,3],[2,4],[3,1],[3,2],[3,4],[4,1],[4,2],[4,3]]
各セルの隣人のコードでリストのリストを作成する関数を作成する方法を知っています:
pos how = [ (0+dx,0+dy) | dx <- [0..(how-2)], dy <- [0..how-1] ] :: [(Int,Int)]
neighbour (x,y) how = [ (x+dx,y+dy) | dy <- [-1..1], dx <- [-1..1],
x+dx >= 0, y+dy >= 0, x+dx<=how-2, y+dy <= how-1,
(x,y)/=(x+dx,y+dy) ] :: [(Int,Int)]
all_n how = [ p | x <- pos how, let p = neighbour x how ] :: [[(Int,Int)]]
しかし、私が説明したように動作するように変更することはできません。