Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell 三角形格式的帕斯卡数_Haskell - Fatal编程技术网

Haskell 三角形格式的帕斯卡数

Haskell 三角形格式的帕斯卡数,haskell,Haskell,在社区成员的帮助下,特别是在Daniel的帮助下,我可以列出pascal三角形的编号。但是,每当我想将三角形显示为三角形形状时,它都会给出类似这样的错误:输入“import”时的parse error。我希望有人能给我解释一下。代码如下: import Text.Printf pascal :: [[Integer]] pascal = iterate (\prev -> 1 : zipWith (+) prev (tail prev) ++ [1]) [1]

在社区成员的帮助下,特别是在Daniel的帮助下,我可以列出pascal三角形的编号。但是,每当我想将三角形显示为三角形形状时,它都会给出类似这样的错误:输入“import”时的parse error。我希望有人能给我解释一下。代码如下:

    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
简要答复:

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]
其中
必须比前一行进一步缩进,
最长
必须与
行对齐

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
    以获取第二种意见。(您还可以下载并安装fast Hugs编译器,该编译器不支持Haskell 98和多参数类型类,但不支持大量ghc扩展。)

真奇怪。您应该在
的where
行中得到一个解析错误,该错误必须缩进到比
prettyPascal
更远的位置。这就是我得到一个解析错误的地方。我不确定您是在文件中这样做的,还是在堆栈溢出上格式化代码的方式,但让顶级代码从不是第一列的列开始(太容易出错)不是一个好主意。此外,您将需要一个模块声明
module,无论它位于何处,如果没有
Main
,编译将失败。此处未正确缩进。main将是这样的:main::IO()main=prettyPascal 10是的,那可能是
main
。但是如果您添加一个模块声明,您可以使该模块中的其他定义对其他模块可用,因此我仍然建议您这样做。@SaugataBose这很奇怪。您使用的是哪种编辑器,在哪种操作系统上?您使用的是什么编译器/解释器?我使用的是ghci 6.12.3。这是我给编译器编译的全部代码:module prettyPascal where import Text.Printf pascal'=iterate(\prev->1:zipWith(+)prev(tail prev)++[1])[1]prettyPascal n=mapM\r->Printf“%*s\n”(div(longest+length r)2)r)行,其中rows=map(unwords.地图显示)$take(n+1)pascal'最长=长度$lastrows@SaugataBose你真的确定这就是文件中的全部内容吗?你使用的是哪个编辑器,在什么操作系统上?我只希望在你的文件不是以单词
module
开头的情况下收到这种消息。我发现,每当我试着使用导入它在ghci 6.12.3上得到了相同的错误。非常好。非常有趣。至少我得到了一个解决方案,最重要的是我学到的技术很少。很多。现在我必须解决第二个问题:显示相同prblm的置换问题