Привет Я пытаюсь преобразовать эту строкуПреобразование строки в пользовательский тип Haskell
Blade Runner,Ridley Scott,1982,Amy,5,Bill,8,Ian,7,Kevin,9,Emma,4,Sam,7,Megan,4
к типу пленки
type UserRatings = (String,Int)
type Film = (Title, Director, Year , [UserRatings])
из текстового файла, который содержит 25 фильмов
это что я пытался сделать
maybeReadTup :: String ->(String, Int)
maybeReadTup s = do
[(n, [c])] <- return $ reads s
return [(n, [c])]
parseLines :: [String] -> Film
parseLines list
| isInt(list !! 3) = (list !! 0,(list !! 1), read (list !! 2), maybeReadTup [ (list!!1,read (list !! 2))])
isInt :: String ->Bool
isInt[] = True
isInt (x:xs)
| isNumber x = True && isInt xs
| otherwise = False
parseChars :: String -> String -> [String]
parseChars [] _ = []
parseChars (x:xs) stringCount
| x == ',' = [stringCount] ++ parseChars xs ""
| otherwise = (parseChars xs (stringCount ++ [x]))
parseAll :: [String] -> [Film]
parseAll [] = []
parseAll (x:xs) = parseLines (parseChars x "") : (parseAll xs)
Но я ошибаюсь, может кто-то может помочь мне разобрать этот пользовательский тип tuple [(String,Int)]
? И можете ли вы помочь мне понять, как работают parseLines? Я новичок в Haskell
Почему каждое слово на входе через запятую? – chepner
@chepner есть лучший способ сделать это? Если я изменю файл, это поможет мне разобрать его? – Max
Я бы предположил, что что-то вроде «Blade Runner, Ridley Scott, 1982, ...» было бы лучше, чтобы вы знали, где заканчивается название и начинается режиссер (при условии, конечно, что названия не содержат * запятые). – chepner