Haskell 中没有 Text.Printf 的字符串格式化列
String Formatting columns in Haskell without Text.Printf
我是 Haskell 的新手。我在学校项目的最后一部分。我必须获取元组并将它们打印到输出文件中,并用制表符列分隔它们。所以 (709,4226408), (12965,4226412) 和 (5,4226016) 应该有
的输出
709 4226408
12965 4226412
5 4226016
我一直在努力做的是:
genOutput :: (Int, Int) -> String
genOutput (a,b) = (show a) ++ "\t" ++ (show b)
这会产生如下输出:
"709\t4226408"
"12965\t4226412"
"5\t4226016"
这有 3 个问题。 1)报价仍然出现在输出中。 2) \t 制表符实际上并没有变成制表符space。 .每当我尝试为“”制作一个实际的标签时,它只会以“” space 的形式出现。 3)它们不像上面的例子那样对齐到列中。我知道 Text.Printf 存在,但我们不允许导入除以下内容以外的任何内容:
import System.IO
import Data.List
import System.Environment
我猜这就是你从 GHCi 得到的输出?尝试使用 putStrLn
代替:
Prelude> genOutput (1,42)
"1\t42"
Prelude> putStrLn $ genOutput (1,42)
1 42
这是为什么?
如果你告诉 GHCi 计算一个表达式,它会这样做并(或多或少)使用 show
输出它 - show
被设计为与 read
一起工作并且通常会输出一个值,就好像您将它直接输入到 Haskell 中一样。对于将包含转义序列和 "
s
的字符串
现在使用 putStrLn
它将获取字符串并将其打印到 stdout,正如您所期望的那样。
使用print
另一个原因可能是您使用 print
来输出您的值 - print
是 show
+ putStrLn
所以它会首先显示值重新引入转义符(就像 GHCi 那样)——所以如果你使用 print
如果你使用 String
s
则将其更改为 putStrLn
我是 Haskell 的新手。我在学校项目的最后一部分。我必须获取元组并将它们打印到输出文件中,并用制表符列分隔它们。所以 (709,4226408), (12965,4226412) 和 (5,4226016) 应该有
的输出709 4226408
12965 4226412
5 4226016
我一直在努力做的是:
genOutput :: (Int, Int) -> String
genOutput (a,b) = (show a) ++ "\t" ++ (show b)
这会产生如下输出:
"709\t4226408"
"12965\t4226412"
"5\t4226016"
这有 3 个问题。 1)报价仍然出现在输出中。 2) \t 制表符实际上并没有变成制表符space。 .每当我尝试为“”制作一个实际的标签时,它只会以“” space 的形式出现。 3)它们不像上面的例子那样对齐到列中。我知道 Text.Printf 存在,但我们不允许导入除以下内容以外的任何内容:
import System.IO
import Data.List
import System.Environment
我猜这就是你从 GHCi 得到的输出?尝试使用 putStrLn
代替:
Prelude> genOutput (1,42)
"1\t42"
Prelude> putStrLn $ genOutput (1,42)
1 42
这是为什么?
如果你告诉 GHCi 计算一个表达式,它会这样做并(或多或少)使用 show
输出它 - show
被设计为与 read
一起工作并且通常会输出一个值,就好像您将它直接输入到 Haskell 中一样。对于将包含转义序列和 "
s
现在使用 putStrLn
它将获取字符串并将其打印到 stdout,正如您所期望的那样。
使用print
另一个原因可能是您使用 print
来输出您的值 - print
是 show
+ putStrLn
所以它会首先显示值重新引入转义符(就像 GHCi 那样)——所以如果你使用 print
如果你使用 String
s
putStrLn