gpt4 book ai didi

haskell - 在 Haskell 中,为什么我必须在此代码中使用美元符号?

转载 作者:行者123 更新时间:2023-12-03 15:05:51 28 4
gpt4 key购买 nike

我仍在尝试破解此代码:

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

problem_8 x = maximum . map product . groupsOf 5 $ x为什么不能只是 groupsOf 5 x ?
是因为 x 稍后会扩展为其他一些表达式(这里将是: digits = map digitToInt $concat $ lines t)?这就是所谓的懒惰(x现在不会扩展,但可能以后)?

最佳答案

没有 $ ,优先级如下:

maximum . map product . (groupsOf 5 x)

由于 . (函数组合) 将两个函数作为参数, groupsOf 5 x无法返回函数,这是一个错误。

$ ,优先级如下:
(maximum . map product . groupsOf 5) x

这等效于(通过函数组合):
maximum (map product (groupsOf 5 x))

或者:
maximum $ map product $ groupsOf 5 x

(但是像这样串接 $ 被认为是糟糕的风格)

请注意,这与懒惰无关。

关于haskell - 在 Haskell 中,为什么我必须在此代码中使用美元符号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8275058/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com