2016-03-17 4 views
-2

Я новичок, любая помощь будет оценена. Моя цель - получить рейтинги от любых Фильм как Float, поэтому я могу правильно манипулировать данными, например, дать «средний рейтинг» для фильма.Haskell, извлечение из кортежей в списке

type Title = String 
type Director = String 
type Year = Int 
type Mark = Int 
type Rating = (String, Float) 

-- Define Film type here 
type Film = (Title, Director, Year, [Rating]) 

Типичный фильм выглядит

("True Lies", "James Cameron", 1994, [("Dave",3), ("Kevin",10), ("Jo",0)]) 

Я попытался

extractRating :: Film -> [(String, Float)] 
extractRating (_, _, _, rating) = rating 

Тогда вызов функции, как этот

putStrLn (extractRating "True Lies") 

Если это помогает у НУ помочь мне вот эта ошибка дамп

haskell.hs:82:21: 
Couldn't match type ‘(String, Float)’ with ‘Char’ 
Expected type: String 
    Actual type: [(String, Float)] 
In the first argument of ‘putStrLn’, namely 
    ‘(extractRating "True Lies")’ 
In a stmt of a 'do' block: putStrLn (extractRating "True Lies") 

haskell.hs:82:35: 
Couldn't match type ‘[Char]’ 
       with ‘(Title, Director, Year, [Rating])’ 
Expected type: Film 
    Actual type: [Char] 
In the first argument of ‘extractRating’, namely ‘"True Lies"’ 
In the first argument of ‘putStrLn’, namely 
    ‘(extractRating "True Lies")’ 
In a stmt of a 'do' block: putStrLn (extractRating "True Lies") 
+3

_ ** Все еще ** _ то, что игра базы данных фильмов ?? – leftaroundabout

+0

Да, еще. Вы будете получать эти сообщения от других, подобных мне ежегодно, считайте это традицией;) –

+0

Вы передаете 'String' в функцию' extractRating', которая ожидает, что тип 'Film' будет единственным аргументом. Кроме того, 'putStrLn' ожидает' String'. Может быть, вы хотите использовать 'print' вместо этого? –

ответ

1

Я не могу оставить комментарий, но я настоятельно рекомендую смотреть в ключевое слово данных и сопоставления с образцом, вместо того, чтобы использовать кортежи.

PS: Отредактировано, чтобы быть немного более полезным. Во всяком случае, проблема, которую я вижу, это «True Lies». extractRating - тип Film, когда вы даете ему строку. Способ подходить к этой проблеме - вместо того, чтобы вход был фильмом, просто измените его на строку и найдите любые совпадения на основе данной строки, чтобы вернуть рейтинг.

+1

Ну, да, нужно использовать 'data' и сопоставление образцов. Но на самом деле это не отвечает на вопрос, не помогает ОП с этой проблемой, и не имеет никакого отношения к проблеме, с которой мы сталкиваемся с этими глупыми вопросами о базе данных на данный момент. (И FWIW, я даже не уверен, что я не одобряю это упражнение с использованием кортежей вместо 'data' - это не хороший стиль, но для начинающих это кажется разумным упрощением.) – leftaroundabout

+1

Я старался не давать слишком много, потому что это казалось как это было домашнее задание, что делает невозможным изменение этих вопросов базы данных фильмов в любом случае. –

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