Инкапсуляция списка функций в haskell в один

Кто-то сказал, что я, возможно, не «понимаю», как правильно кодировать в 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 of:

*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, вероятно, подойдут к этому совершенно иначе, и это то, что я хочу знать!

6
задан devoured elysium 3 December 2010 в 09:05
поделиться