总结答案:
module PrettyPascal where -- good practice, means you can combine it with other code
import Text.Printf
pascal :: [[Integer]]
pascal = iterate (\prev -> 1 : zipWith (+) prev (tail prev) ++ [1]) [1]
where
必须比前一行进一步缩进,并且longest
必须与rows
:
prettyPascal :: Int -> IO ()
prettyPascal n = mapM_ (\r -> printf "%*s\n" (div (longest + length r) 2) r) rows
where rows = map (unwords . map show) $ take (n + 1) pascal
longest = length $ last rows
你可以这样做 main = prettyPascal 10
,但你可能更喜欢:
main =
putStrLn "How many rows of Pascal's triangle would you like to see?"
>> readLn >>= prettyPascal
(如果您使用的是 ghci 或 Hugs,则不需要main
,只需prettyPrint 10
在提示符处键入即可。)
以下讨论的其他要点:
- Haskell 区分大小写,所以它必须是
prettyPascal
,而不是PrettyPascal
。
- 当您使用类型类(如在其他代码中)时,您需要
Eq a =>
而不是Eq a ->
- 使用复制和粘贴来避免输入错误
- 将您的函数保存在一个名为
PrettyPascal.hs
.
- 然后通过键入在 ghci 中加载您的函数
:l PrettyPascal
。
- 有时,如果您不确定是您的编译器还是您的代码,请复制并粘贴到
codepad.org
第二个意见。(你也可以下载并安装快速 Hugs 编译器,它执行 Haskell 98 和多参数类型类,但不是很多 ghc 扩展。)