0
나는 문제가이 주어진 데이터베이스에서 정보의 특정 비트를 출력하는 데 :하스켈 높은 주문 기능
type Title = String
type Actor = String
type Cast = [Actor]
type Year = Int
type Fan = String
type Fans = [Fan]
type Period = (Year, Year)
type Film = (Title, Cast, Year, Fans)
type Database = [Film]
testDatabase :: Database
testDatabase = [("Casino Royale", ["Daniel Craig", "Eva Green", "Judi Dench"], 2011, ["Garry", "Dave", "Zoe", "Kevin", "Emma"]),
("Cowboys & Aliens", ["Harrison Ford", "Daniel Craig", "Olivia Wilde"], 2011, ["Bill", "Jo", "Garry", "Kevin", "Olga", "Liz"]),
("Catch Me If You Can", ["Leonardo DiCaprio", "Tom Hanks"], 2006, ["Zoe", "Heidi", "Jo", "Emma", "Liz", "Sam", "Olga", "Kevin", "Tim"])]
참고 :이 때문에리스트의 크기로 데이터베이스의 일부입니다.
사용자가 연도를 입력하고 영화 제목 만 출력하도록 허용하는 기능을 작성하려고합니다. 사용자가 팬 이름을 입력하고 출력 한 팬과 유사한 것을 수행했습니다. 이에 대한 코드는 다음과 같습니다 ...의 팬 :
filmsByFan y = map (\(a,_,_,_) -> a) $ filter (\(_,_,_,a) -> elem y a) testDatabase
이 100 % 작동하고, 그래서 byYear와 비슷한 하나의 시도 :
filmsByYear y = map (\(a,_,_,_) -> a) $ filter (\(_,_,a,_) -> elem y a) testDatabase
을하지만이 컴파일되지 않습니다 .. 이것은 Year 유형이 Int로 설정 되었기 때문입니까? 그렇다면 비슷한 방식으로 내 문제에 대한 해결책이 있습니까?
미리 감사드립니다.
나는 코드를 수정했지만이 나는 오류입니다 get -------------------- (Eq ([Year] -> Bool))에 대한 인스턴스가 없습니다. 사용시 발생하는 가능한 수정 : add 다음 표현식에서 elem a == y 필터의 첫 번째 인수 인 '(\ (_, _, a, _) -)에 대한 인스턴스 선언은 (Eq ([Year] > elem a == y) ' '($)'의 두 번째 인수, 즉 'filter (\ (_, _, a, _) -> elem a == y) testDatabase ' – user2240649
테스트를 마쳤습니다. 그것은 작동합니다. 어떻게 함수를 부르니? – Thomas
걱정 마세요, 지금 작동 중입니다! 귀하의 의견에 대해 대단히 감사합니다! – user2240649