Es gibt eine Art Record
:Umfang der Muster Anpaßvariablen
type Day = Integer
type Description = String
type Name = String
type PhoneNumber = String
type Year = Integer
data Month = January | February | March | April | May | June | July
| August | September | October | November | December
deriving (Eq, Ord, Enum, Show)
data Birthday = Birthday Month Day
deriving (Eq, Show)
data DatingDate = DatingDate Year Month Day
deriving (Eq, Show)
data Record = BirthdayRecord Name Birthday
| PhoneRecord Name PhoneNumber
| DatingRecord DatingDate Description
deriving (Eq, Show)
und Funktion, welche Filter diese Aufzeichnung von Datum:
getAssignment :: (Year, Month, Day) -> [Record] -> [Record]
getAssignment (year, month, day) = filter matchDate
where matchDate (BirthdayRecord _ (Birthday month day)) = True
matchDate (DatingRecord (DatingDate year month day) _) = True
matchDate _ = False
Diese Definition von getAssignment
ist aufgrund eines Fehlers nicht korrekt:
warning: Defined but not used: `year'
Eigentlich ist es eine Art Überraschung für mich, dass im Muster passender Teil von getAssignment
und year
im Muster übereinstimmenden Teil von matchDate
sind nicht das Gleiche.
Also, wo sind die Bereichsgrenzen von Variable gestartet und beendet? Es passiert wegen where
Abschnitt?
Btw, dieser Fehler kann mit einigen redundanten zahlreiche Verwendung von (year, month, day)
Variablen vermieden werden.
getAssignment' :: (Year, Month, Day) -> [Record] -> [Record]
getAssignment' date = filter (matchDate date)
where matchDate (_, m, d) (BirthdayRecord _ (Birthday month day)) =
month == m && day == d
matchDate (y, m, d) (DatingRecord (DatingDate year month day) _) =
year == y && month == m && day == d
matchDate _ _ = False
Wie kann es umgeschrieben werden?
Gibt es eine Möglichkeit, diese Variablen "Monat" und "Monat" zu unterdrücken? –
Entschuldigung, ich verstehe Ihren Kommentar nicht. Kannst du mehr Details zu dem geben, was du verlangst? – dave4420
Wenn ich 'f x = x == y 'Definition gesehen habe, möchte ich es wegen der redundanten Verwendung von' x 'Variable wie' f y == True' umschreiben. In diesem Fall würde ich den gleichen Trick verwenden, um "Jahr", "Monat" und "Tag" Variablen loszuwerden. –