三角形格式的pascal数字

时间:2012-11-13 20:04:49

标签: haskell

在这个社区的成员的帮助下,尤其是丹尼尔,我可以找到帕斯卡三角形数字列表。 BUt每当我想将三角形​​显示为三角形时,它会给出错误:输入'import'上的解析错误。我告诉some1将cme向前解释我这个。代码如下:

    import Text.Printf

    pascal :: [[Integer]]
    pascal = iterate (\prev -> 1 : zipWith (+) prev (tail prev) ++ [1]) [1]

    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

1 个答案:

答案 0 :(得分:1)

总结答案:

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
  • 的文件中
  • 然后输入:l PrettyPascal
  • ,在ghci中加载您的函数
  • 有时,如果您不确定它是您的编译器还是代码,请复制并粘贴到codepad.org以获得第二意见。 (您也可以下载并安装快速Hugs编译器,该编译器执行Haskell 98和多参数类型类,但没有大量的ghc扩展。)