我还在尝试破解这段代码:
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)
在 problem_8 x = maximum . map product . groupsOf 5 $ x
为什么不能只是被groupsOf 5×?是因为x以后会扩展到其他一些表达式(这里它将是:) digits = map digitToInt $concat $ lines t?这是所谓的懒惰(x现在不会扩展,但也许以后)?
bdo*_*lan 15
如果没有$,优先顺序如下:
maximum . map product . (groupsOf 5 x)
Run Code Online (Sandbox Code Playgroud)
由于.(函数组合)将两个函数作为参数,并且groupsOf 5 x不能返回函数,因此这是一个错误.
有了$,优先顺序就像这样:
(maximum . map product . groupsOf 5) x
Run Code Online (Sandbox Code Playgroud)
这相当于(通过函数组合):
maximum (map product (groupsOf 5 x))
Run Code Online (Sandbox Code Playgroud)
要么:
maximum $ map product $ groupsOf 5 x
Run Code Online (Sandbox Code Playgroud)
(但是$像这样穿线被认为是不好的风格)
注意,这与懒惰无关.
你不必须使用$,事实上,你永远都使用它.
在你的情况下,毫无意义的^ H ^ H ^ H ^ Hsfree符号表明自己:而不是
problem_8 x = maximum . map product . groupsOf 5 $ x
Run Code Online (Sandbox Code Playgroud)
这相当于:
problem_8 x = (maximum . map product . groupsOf 5) x
Run Code Online (Sandbox Code Playgroud)
我们可以忽略x等式的两边:
problem_8 = maximum . map product . groupsOf 5
Run Code Online (Sandbox Code Playgroud)