W在这个社区成员的帮助下,特别是通过Daniel I,我可以mke pascal三角形数的列表。BUt每当我想将三角形显示为三角形时,它都会给出错误,比如:在输入'import'时解析错误。我希望有人能给我解释一下。代码如下:
import Text.Printf
pascal :: [[Integer]]
pascal = iterate (prev -> 1 : zipWith (+) prev (tail prev) ++ [1]) [1]
prettyPascal :: Int -> IO ()
prettyPascal n = mapM_ (r -> printf "%*sn" (div (longest + length r) 2) r) rows
where rows = map (unwords . map show) $ take (n + 1) pascal
longest = length $ last rows
总结答案:
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 "%*sn" (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
的文件中 - 然后通过键入
:l PrettyPascal
在ghci中加载函数 - 有时,如果您不确定是编译器还是代码,请复制并粘贴到
codepad.org
以获得第二种意见。(您也可以下载并安装快速Hugs编译器,它可以执行Haskell 98和多参数类型类,但不能执行大量的ghc扩展。)