Я только начал изучать Haskell и делал несколько проблем в Интернете. В большинстве случаев я могу найти решение, но я не могу его распечатать в ожидаемом формате вывода.Печать треугольника Паскаля в Haskell
Например, я попытался выполнить программу треугольника Паскаля. Я узнал, как создать Треугольник Паскаля как список списков Ints, но я не могу понять, как его напечатать.
Вот мой код.
import Data.List
pascal n = map liner [0..n]
where liner x = map (comb x) [0..x]
comb n 0 = 1
comb 0 r = 0
comb n r = comb (n-1) (r-1) * n `div` r
main = do
order <- getLine
let output = pascal . (read :: String -> Int) $ order
print output
В настоящее время, выход, как
[[1],[1,1],[1,2,1],[1,3,3,1]...
Я хочу напечатать его в виде
1
1 1
1 2 1
1 3 3 1
...
Как мне это сделать? Я пробовал использовать такие вещи, как mapM_ или intercalate "", без везения. Я еще не в монады, поэтому я не понимаю, как работает MapM.
Не нужно понимать монады для этого, действительно. 'f = unlines. map (intercalate "". map show) 'будет выдавать желаемое значение' String' из значения '[[Int]]'; просто передайте результат в 'putStr'. – Jubobs
и 'intercalate" "' просто 'unwords' - вы получаете его с' putStr. unlines. map (unwords. map show) ' – Carsten
Aah beautiful. Я смешивал 'lines' и' unlines' и 'map' все неправильно. Я не использовал 'show' правильный путь. Благодаря! –