В настоящее время я возился с проблемой haskell относительно 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)
?
Большое спасибо. Я не нашел это (,) через Hoogle :-( – Hennes
@Hennes '(,)' - конструктор пары, а '(,) a' - это короткий путь для записи' (\ b -> (a, b)) '. – chi
, честно говоря, я предпочитаю использовать здесь' -XTupleSections', а именно 'sequence [(resPt)) <$> readArray board resPt ...', который намного удобнее и читабельнее исходного ответа. –