В следующем коде перед последней фразой я могу поставить in
. Изменит ли это что-нибудь?
Еще один вопрос: Если я решу поставить in
перед последней фразой, нужно ли делать отступ?
Я пробовал без отступов, и hugs жалуется
Последний генератор в 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:
f x y | y>z = ...
| y==z = ...
| y
Обратите внимание, что это нельзя сделать с помощью выражения let, которое охватывает только выражение, которое оно окружает.
Мой вопрос: получается, что переменная digits не должна быть видна последней фразе print. Я что-то упустил?