我想从一个文本文件中读取一个矩阵[[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
https://stackoverflow.com/q/45306764/625403最近被问到,这是另一种方式来实现下面的pigworker的答案中提供的相同的实现。 – amalloy