Em Haskell, quando usamos o let?
No código a seguir, a última frase que posso colocar umin
em frente. Isso vai mudar alguma coisa?
Outra pergunta: Se eu decidir colocarin
na frente da última frase, preciso recuá-la?
Eu tentei sem recuar e abraços reclama
último gerador em {{}} deve ser uma expressão
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
EditaOk, então as pessoas parecem não entender o que estou dizendo. Deixe-me reformular: os dois seguintes são iguais, dado o contexto acima?
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
Outra questão relativa ao escopo das ligações declaradas emlet
: Eu leioaqu que
where
láusula
s vezes, é conveniente escopo ligações de várias equações protegidas, o que requer uma cláusula where:
f x y | y>z = ...
| y==z = ...
| y<z = ...
where z = x*x
Observe que isso não pode ser feito com uma expressão let, que apenas escopo a expressãoque inclui.
Minha pergunta: então, os dígitos variáveis não devem estar visíveis para a última frase impressa. Perdi alguma coisa aqui?