2016-09-09 3 views
7

У меня есть код, как:Haskell: Переменная не в рамках

main = interact $ show . maxsubseq . map read . words 

maxsubseq :: (Ord a,Num a) => [a] -> (a,[a]) 
maxsubseq = snd . foldl f ((0,[]),(0,[])) where 
f ((h1,h2),sofar) x = (a,b) where 
a = max (0,[]) (h1 + x ,h2 ++ [x]) 
b = max sofar a 

Но я получаю сообщение об ошибке:

maxSub.hs:6:17: error: Variable not in scope: h1 

maxSub.hs:6:22: error: Variable not in scope: x 

maxSub.hs:6:25: error: Variable not in scope: h2 :: [t1] 

maxSub.hs:6:32: error: Variable not in scope: x 

maxSub.hs:7:9: error: Variable not in scope: sofar :: (t, [t1]) 

не в состоянии понять, почему ??

Любые идеи?

Спасибо.

ответ

12
main = interact $ show . maxsubseq . map read . words 

maxsubseq :: (Ord a,Num a) => [a] -> (a,[a]) 
maxsubseq = snd . foldl f ((0,[]),(0,[])) where 
f ((h1,h2),sofar) x = (a,b) where 
    a = max (0,[]) (h1 + x ,h2 ++ [x]) 
    b = max sofar a 

Форматы действительно имеет значение в Haskell ...

Возможно, это выглядит лучше:

main = interact $ show . maxsubseq . map read . words 

maxsubseq :: (Ord a,Num a) => [a] -> (a,[a]) 
maxsubseq = snd . foldl f ((0,[]),(0,[])) where 
    f ((h1,h2),sofar) x = (a,b) 
     where { 
     a = max (0,[]) (h1 + x ,h2 ++ [x]); 
     b = max sofar a; 
       } 
+0

Я чувствую себя как нуб прямо сейчас. Большое спасибо. Оно работает!! –

Смежные вопросы