【发布时间】:2018-01-01 11:44:01
【问题描述】:
我想从一个文本文件中读取一个矩阵[[Int]](这个矩阵在
project euler's problem),所以我有以下代码
parseInt :: String -> [Int]
parseInt [] = []
parseInt (x : xs) = [(ord x) - (ord '0')] ++ (parseInt xs)
main = do
str <- readFile "11.dat"
print $ fmap parseInt (lines str)
这段代码工作正常,我可以输出矩阵读取。
但是,我想更改 main 函数,这样我就可以重复使用 fmap parseInt (lines str) 而不是在我的代码中重复它。
main = do
str <- readFile "11.dat"
print b
where b = fmap parseInt (lines str)
编译器给我一个错误
11.hs:37:34: error:
Variable not in scope: str :: String
[Finished in 0.9s]
似乎是提要操作str <- readFile "11.dat" 导致了这个问题,因为当我直接从字符串中读取代码时,代码工作正常
main = do
print b
where b = fmap parseInt (lines "08 02 22 97 38 15 00 40 00 75 04 05 07 78 52 12 50 77 91 08\n...01 70 54 71 83 51 54 69 16 92 33 48 61 43 52 01 89 19 67 48\n")
我也可以let
main = do
str <- readFile "11.dat"
let b = fmap parseInt (lines str)
print b
那么我该如何使用that 来做到这一点
【问题讨论】:
-
stackoverflow.com/q/45306764/625403 最近被问到,这是实现以下 pigworker 答案中提供的相同实现的另一种方式。