在Haskell中打印Pascal的三角形

Master_Pabu

我刚刚开始学习Haskell,并且在网上遇到了一些问题。大多数时候,我可以找出解决方案,但无法以预期的输出格式将其打印出来。

例如,我尝试执行Pascal的三角程序。我找到了如何将Pascal的Triangle生成为Ints列表的列表,但是我不知道如何打印它。

这是我的代码。

import Data.List
pascal n = map liner [0..n]
    where liner x = map (comb x) [0..x]

comb n 0 = 1
comb 0 r = 0
comb n r = comb (n-1) (r-1) * n `div` r 

main = do
    order <- getLine
    let output = pascal . (read :: String -> Int) $ order
    print output 

目前,输出就像

[[1],[1,1],[1,2,1],[1,3,3,1]...

我想以表格形式打印

1
1 1
1 2 1
1 3 3 1
...

我该怎么做呢?我试过使用诸如mapM_或插入式“”之类的东西,但是没有运气。我还不喜欢monad,所以我不了解mapM的工作原理。

夸尔兹

有几种不同的方法可以做到这一点,但最简单的方法(IMO)如下。

putStrLn $ intercalate "\n" $ map (intercalate " " . map show) output

这首先将列表中的所有数字转换为字符串(使用show)。然后,它将最里面的列表转换成字符串,其中每个元素都用空格分隔(使用intercalate " ")。然后,它将最外面的列表转换为字符串,其中每个元素都由换行符分隔(使用intercalate "\n")。最后,它将结果字符串推到stdout上。main以此替换您的最后一行,它应该做您想要的。

编辑:正如Yakym在他的回答中提到的,intercalate " "并且intercalate "\n"可以替换为unwordsunlines,使上面的代码更加简洁(它也消除了导入的需要Data.List)。

putStr $ unlines $ map (unwords . map show) output

我更改putStrLn为,putStr因为unlines自动在输出的末尾添加了换行符。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

VB 6.0中的Pascal三角形

来自分类Dev

Lisp中的Pascal三角形

来自分类Dev

SML中的Pascal三角形

来自分类Dev

在Java中打印中心对齐的三角形以及倒置三角形

来自分类Dev

在Python中正确打印Pascal的三角形

来自分类Dev

Python:打印1行Pascal三角形

来自分类Dev

Pascal的Python三角形

来自分类Dev

Pascal三角形到达限制

来自分类Dev

生成Pascal三角形时出错

来自分类Dev

递归到迭代的Pascal三角形

来自分类Dev

三角形CSS中的三角形

来自分类Dev

方案中的尾递归Pascal三角形

来自分类Dev

打印星号的三角形图案

来自分类Dev

Python for循环打印三角形

来自分类Dev

以数字作为行打印的三角形

来自分类Dev

打印空的星号三角形c

来自分类Dev

haskell函数来识别三角形

来自分类Dev

如何在Java中旋转,缩进和绘制三角形以打印梯形?

来自分类Dev

给定尺寸,使用/,\和_在bash中打印三角形

来自分类Dev

C ++中的打印相反三角形函数

来自分类Dev

在 Python 中打印数字的等腰三角形

来自分类Dev

在JS中打印镜像数字三角形

来自分类Dev

在java中打印一个独特的三角形字符

来自分类Dev

gnuplot中基于三角形的图像

来自分类Dev

React Native中的CSS三角形

来自分类Dev

在CSS中创建三角形标记

来自分类Dev

在UIButton中创建三角形

来自分类Dev

盒子内CSS中的三角形

来自分类Dev

比较Prolog中的三角形