История изменений
Исправление qnikst, (текущая версия) :
main = getargs >>= \(x:_) -> putstrln =<< fmap (case x of "-d" -> go true ; "-e" -> go false ; _ -> error "usage foobar") getcontents
go tp d = unlines $ map (unwords . map (fromjust . (`m.lookup` m)) . words) t
where (m,h,t) | tp =
let (_,l,m) = foldl' (\(i,l,m) v -> case m.lookup v m of nothing -> (i+1,v:l, m.insert v (show i) m) ; _ -> (i,l,m)) (0,[],m.empty) (words d)
in (m,l,lines d)
| otherwise = (\(a,b) -> (a,[],b)) $ ((m.fromlist . (zip [show x | x <- [0..]]) . words . head) &&& tail) (lines d)
6 строк :) нормально, с учетом разделения чистых и не-чистых вычислений.
Впрочем, логично, что скриптового языка меньше, но термин «многословый» минимум не в тему.
Исходная версия qnikst, :
main = getargs >>= \(x:_) -> putstrln =<< fmap (case x of "-d" -> go true ; "-e" -> go false ; _ -> error "usage foobar") getcontents
go tp d = unlines $ map (unwords . map (fromjust . (`m.lookup` m)) . words) t
where (m,h,t) | tp =
let (_,l,m) = foldl' (\(i,l,m) v -> case m.lookup v m of nothing -> (i+1,v:l, m.insert v (show i) m) ; _ -> (i,l,m)) (0,[],m.empty) (words d)
in (m,l,lines d)
| otherwise = (\(a,b) -> (a,[],b)) $ ((m.fromlist . (zip [show x | x <- [0..]]) . words . head) &&& tail) (lines d)
6 строк :) нормально, с учетом разделения чистых и не-чистых вычислений.