目前,我在摆弄有关2D ST数组和递归的haskell问题。

给定2D位置和方向数组,我写了一条线,返回该数组内所有结果点的列表:

let cellsAround = [resPt | dir <- directions,
                         let resPt = (fst dir + fst point, snd dir + snd point),
                         fst resPt >= 0 && fst resPt <= fst maxIdx &&
                         snd resPt >= 0 && snd resPt <= snd maxIdx]


现在的目标是用数组的内容丰富结果列表项,我尝试了这一点:

cellsAround <- sequence [readArray board resPt | dir <- directions,
                         let resPt = (fst dir + fst point, snd dir + snd point),
                         fst resPt >= 0 && fst resPt <= fst maxIdx &&
                         snd resPt >= 0 && snd resPt <= snd maxIdx]


这也很好。但是目标是将[[Point,Int)]结合在一起,因为我必须过滤数组内容。

任何想法如何将其组合为

(resPt, readArray board resPt)


最佳答案

最小的变化:

sequence [(,) resPt <$> readArray board resPt
         | ...

09-26 08:43