Кто-то сказал, что я, возможно, не «понимаю», как правильно писать код на Haskell.Кто-то должен быть абсолютно прав, поскольку я чувствую весь мой код на haskell, но более простые функции действительно ужасны (по крайней мере, по сравнению с моим кодом ООП на «стандартном» языке, таком как Java или C ++):
mev = matrixExpValues 5 4 3
cs = canonicalSt 4 3
cs_t1 = map (foldl (++) "") (map (map show) cs)
cs_t2 = map (++ ":") cs_t1
mev_t1 = intXxsToStringXxs mev
mev_t2 = map (map (++ "\t")) mev_t1
mev_t3 = map (foldl (++) "") mev_t2
res1 = zipWith (++) (map (++ "\t") cs_t2) mev_t3
res2 = map (++ "\n") res1
final_result = foldl (++) "" res2
с mev
и cs
из:
*Main> mev
[[2,-2,-2,-6],[4,2,0,-2],[2,2,4,4],[6,4,2,2],[6,4,2,6]]
*Main> cs
[[0,0,4],[0,1,3],[0,2,2],[1,1,2]]
(эти значения были напечатаны вручную, мне понадобится это для работы с произвольными mev
и cs
!) У меня изначально есть 2D матрицак которой я применял последовательность операций до тех пор, пока не получил желаемый результат.
Это работает, но теперь я хотел бы заключить всю эту логику в одну функцию (назовем ее matrix_transf
).Текущий код привязан к тому, что возвращают matrixExpValues
и canonicalSt
, и я хотел бы иметь что-то вроде
matrix_transf mev cs =
...all those transformations
...until I get to final_result
Любая критика приветствуется (она мне нужна, чтобы я могла ее улучшить!)Я верю, что хорошие программисты на Haskell, вероятно, подойдут к этому совершенно по-другому, и это то, что я хочу знать!