我仍在尝试破解这段代码:
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
In problem_8 x = maximum . map product . groupsOf 5 $ x
为什么不能只是 groupsOf 5 x ?
是因为 x 稍后会扩展为其他一些表达式(这里是:digits = map digitToInt $concat $ lines t
)?这就是所谓的lazy(x现在不会扩展,但也许以后)?
如果没有$
,优先级计算如下:
maximum . map product . (groupsOf 5 x)
Since .
(函数组合)以两个函数作为参数,并且groupsOf 5 x
无法返回函数,这是一个错误。
随着$
,优先级计算如下:
(maximum . map product . groupsOf 5) x
这相当于(通过函数组合):
maximum (map product (groupsOf 5 x))
or:
maximum $ map product $ groupsOf 5 x
(然而串起来$
这样被认为是糟糕的风格)
请注意,这与懒惰无关。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)