4
Если я объявляю конструкторы данных, такие какфункция Haskell проверить перестановкой
data City = Baltimore | Chicago | Seattle | Miami | Toronto
deriving (Bounded, Enum, Eq, Ord, Show)
data Name = Orioles | Cubs | Mariners | Marlins | BlueJays
deriving (Bounded, Enum, Eq, Ord, Show)
Как я могу сделать функцию
checkPermutation :: (City -> Name) -> Bool
, чтобы проверить, что никакие два города не присваивается одинаковое имя команды. Например, следующее возвращает True, но если любое «Имя» назначено более чем одному городу, оно вернет False.
test1 :: City -> Name
test1 c = case c of
Baltimore -> Orioles
Chicago -> Cubs
Seattle -> Mariners
Miami -> Marlins
Toronto -> Blue Jays
И вы можете сделать это более эффективным (если это проблема), добавив ограничение 'Ord' и используя наборы вместо' nub'. –
@ ThomasM.DuBuisson Действительно. Я обновил свой ответ. –
Должен ли я поставить этот «checkPermutation f = (== length cities). Length. Nub. Map f $ cities" в инструкции if так или иначе, чтобы я мог вернуть true или false? Кроме того, ghci не нравится «cities = [Baltimore..Toronto]», говоря, что раздел должен быть заключен в круглые скобки, а не в области – Corey