
Am Montag 21 Dezember 2009 21:39:38 schrieb kane96@gmx.de:
-------- Original-Nachricht --------
Datum: Mon, 21 Dec 2009 21:12:48 +0100 Von: Daniel Fischer
An: beginners@haskell.org CC: kane96@gmx.de Betreff: Re: [Haskell-beginners] print all days of calendar Am Montag 21 Dezember 2009 20:47:38 schrieb kane96@gmx.de:
Does (==) ring a few bells?
not really...
Prelude> let okay k = k^3 `mod` 13 == 5 in filter okay [1 .. 30] [7,8,11,20,21,24]
Now, you don't want the numbers between 1 and 30 inclusive whose cube modulo 13 is 5, but the dates in a given month.
getMonth :: Month -> Calendar -> Calendar getMonth month [(1,Jan,y),(2,Jan,y) ... (31,Dec,y)]
more like this: getMonth month calendar = calendar filter ([1..31], month, year) but it doesn't make sense
No. type Calendar = [Date] type Day = Int data Month = Jan | Feb | Mar | Apr | May | Jun | Jul | Ago | Sep | Oct | Nov | Dec deriving (Eq,Enum,Show) type Year = Int type Date = (Day,Month,Year) So the calendar in "getMonth month calendar" is a list of date-triples as illustrated above. Prelude> :t filter filter :: (a -> Bool) -> [a] -> [a] So filter takes 1) a predicate (a function of type (a -> Bool)) 2) a list as arguments. getMonth :: Month -> [Date] -> [Date] One of the arguments to getMonth is a list, and the result should be a list of the same type, thus it's natural to pass that list unchanged to filter. getMonth month calendar = filter predicateThatYouNeed calendar What remains is to define predicateThatYouNeed. It will somehow involve the other argument to getMonth, namely month. And it must map (Day,Month,Year) triples to Bool.