【发布时间】:2016-04-27 16:46:10
【问题描述】:
我刚开始学习 Haskell,一直在网上做一些题。大多数时候,我可以找出解决方案,但我无法以预期的输出格式打印出来。
例如,我尝试做一个帕斯卡三角程序。我发现了如何将 Pascal 的三角形生成为 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_ 或插入“”之类的东西,但没有运气。我还没有进入 monad,所以我不明白 mapM 是如何工作的。
【问题讨论】:
-
真的不需要理解 monads。
f = unlines . map (intercalate " " . map show)将从[[Int]]值中生成所需的String值;只需将结果传递给putStr。 -
而
intercalate " "只是unwords- 你可以通过putStr . unlines . map (unwords . map show)得到它 -
啊漂亮。我混合了
lines和unlines和map都错了。我没有以正确的方式使用show。谢谢! -
@Carsten 啊,是的;我把它复杂化了。