在下面的代码中,我可以把最后一个词放在in前面.它会改变什么吗?
另一个问题:如果我决定放在in最后一个短语的前面,我是否需要缩进它?
我试着没有缩进和拥抱抱怨
do {...}中的最后一个生成器必须是表达式
import Data.Char
groupsOf _ [] = []
groupsOf n xs =
take n xs : groupsOf n ( tail xs )
problem_8 x = maximum . map product . groupsOf 5 $ x
main = do t <- readFile "p8.log"
let digits = map digitToInt $concat $ lines t
print $ problem_8 digits
Run Code Online (Sandbox Code Playgroud)
好的,所以人们似乎不明白我在说什么.让我重新说一下:鉴于上述背景,以下两个是否相同?
1.
let digits = map digitToInt $concat $ lines t
print $ problem_8 digits
Run Code Online (Sandbox Code Playgroud)
2.
let …Run Code Online (Sandbox Code Playgroud) 我目前正在与Haskell合作,并发现自己遇到了一些麻烦.我应该在"dictionary.txt"文件中读取并插入列表中的每一行,但我似乎无法这样做.我有这个代码:
main = do
let list = []
loadNums "dictionary.txt" list
loadNums location list = do
inh <- openFile location ReadMode
mainloop inh list
hClose inh
mainloop inh list = do
ineof <- hIsEOF inh
if ineof
then return ()
else do
inpStr <- hGetLine inh
inpStr:list
mainloop inh list
Run Code Online (Sandbox Code Playgroud)
它应该得到每一行(我知道它确实得到每一行,因为用"putStrLn inpStr"替换"inpStr:list"正常工作,显示所有行),并将其插入列表但我得到以下错误:
Couldn't match expected type `IO' against inferred type `[]'
Run Code Online (Sandbox Code Playgroud)
可能是因为hGetLine不是一个字符串,而是一个IO字符串,我不知道如何处理以获得一个正确的字符串,我可以在我的列表中插入.我不知道如何解决这个问题,或者问题究竟是什么,但如果有人知道如何正确地将文件中的每一行都放入列表中,我会很感激.
提前致谢!
我试图使用Repa实现累积和函数以计算积分图像.我目前的实现如下所示:
cumsum :: (Elt a, Num a) => Array DIM2 a -> Array DIM2 a
cumsum array = traverse array id cumsum'
where
elementSlice inner outer = slice array (inner :. (0 :: Int))
cumsum' f (inner :. outer) = Repa.sumAll $ elementSlice inner outer
Run Code Online (Sandbox Code Playgroud)
问题出在elementSlice函数中.在matlab中或说numpy,这可以指定为array [inner,0:outer].所以我正在寻找的是:
slice array (inner :. (Range 0 outer))
Run Code Online (Sandbox Code Playgroud)
但是,似乎不允许在当前的Repa范围内指定切片.我考虑过在Haskell中使用高效并行模板卷积中讨论的分区,但如果每次迭代都改变它,这似乎是一个相当重要的方法.我还考虑过屏蔽切片(乘以二进制矢量) - 但这似乎再次对大型矩阵执行得很差,因为我会为矩阵中的每个点分配一个掩码矢量...
我的问题 - 有没有人知道是否有计划增加支持切片范围到维修?或者是否有一种高效的方式我可以解决这个问题,也许采用不同的方法?
所以我有一个8mb的文件,每个文件有6个整数,由一个空格隔开.
我目前解析这个的方法是:
tuplify6 :: [a] -> (a, a, a, a, a, a)
tuplify6 [l, m, n, o, p, q] = (l, m, n, o, p, q)
toInts :: String -> (Int, Int, Int, Int, Int, Int)
toInts line =
tuplify6 $ map read stringNumbers
where stringNumbers = split " " line
Run Code Online (Sandbox Code Playgroud)
并映射到Ints over
liftM lines . readFile
Run Code Online (Sandbox Code Playgroud)
这将返回一个元组列表.但是,当我运行它时,加载文件并解析它需要将近25秒.我有什么办法可以加快速度吗?该文件只是纯文本.
haskell ×4
arrays ×1
file ×1
input ×1
io ×1
let ×1
repa ×1
scope ×1
where-clause ×1
whitespace ×1