所以我已经阅读了理论,现在试图在Haskell中解析一个文件 - 但是我没有得到任何结论.这太奇怪了......
以下是我的输入文件的外观:
m n
k1, k2...
a11, ...., an
a21,.... a22
...
am1... amn
Run Code Online (Sandbox Code Playgroud)
其中m,n只是整数,K = [k1, k2...]是一个整数列表,a11..amn是一个"矩阵"(列表列表):A=[[a11,...a1n], ... [am1... amn]]
这是我的快速python版本:
def parse(filename):
"""
Input of the form:
m n
k1, k2...
a11, ...., an
a21,.... a22
...
am1... amn
"""
f = open(filename)
(m,n) = f.readline().split()
m = int(m)
n = int(n)
K = [int(k) for k in f.readline().split()]
# Matrix - list of lists
A = []
for i in …Run Code Online (Sandbox Code Playgroud) 众所周知,人们不会[Char]在Haskell中读取大量数据.一个用ByteStrings来完成这项工作.对此的通常解释是Chars很大并且列表增加了它们的开销.
但是,这似乎不会导致输出出现任何问题.
例如以下程序:
main = interact $ const $ unwords $ map show $ replicate 500000 38000000
Run Code Online (Sandbox Code Playgroud)
在我的计算机上运行只需131毫秒,而以下一个:
import Data.List
sum' :: [Int] -> Int
sum' = foldl' (+) 0
main = interact $ show . sum' . map read . words
Run Code Online (Sandbox Code Playgroud)
如果输入第一个程序的输出作为输入,则需要3.38秒!
使用Strings 的输入和输出性能之间存在这种差异的原因是什么?