三角形格式的帕斯卡数



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扩展。)

最新更新