我想從一個文本文件中讀取一個矩陣[[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