在下面的代码中,最后一个短语我可以把一个 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
好吧,人们似乎不明白我在说什么。让我重新措辞: 考虑到上面的情况,下面两个是相同的吗?
1.
let digits = map digitToInt $concat $ lines t
print $ problem_8 digits
2.
let digits = map digitToInt $concat $ lines t
in print $ problem_8 digits
关于 let
中宣布的约束力范围的另一个问题:
where
条款。
有时,可以方便地在几个守护方程上进行范围绑定,这需要一个 where 子句:
f x y | y>z = ...
| y==z = ...
| y<z = ...
where z = x*x
注意,这不能用 let 表达式来完成,因为 let 表达式只能作用于表达式 它包围着。
我的问题是: 变量数字不应该在最后一个打印短语中可见。我是不是漏掉了什么?