Конструкторы значений в haskell - PullRequest
1 голос
/ 19 сентября 2019

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

Создайте тип Вопрос со значениями конструкторов Сим или Нао .Создайте функцию, которая:

  • listQuest: получить от параметра список Вопросов и вернуть 0 для Нао или 1 для Sim , соответствующих конструкторам в списке.

Я попробовал этот код:

module Question where 

data Question = Yes | No deriving Show

questNum :: Question -> Int
questNum No = 0
questNum Yes = 1

listQuest :: [Question] -> [Int]
listQuest listQuestion =  [ questNum quest | quest <- listQuestion ]

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

Спасибо за помощь

1 Ответ

1 голос
/ 19 сентября 2019

Есть несколько способов сделать это, вы сделали это путем понимания списка, другой способ - использовать карту:

listQuest :: [Question] -> [Int]
listQuest xs = map questNum  xs

короче

listQuest :: [Question] -> [Int]
listQuest  = map questNum  

с использованием Foldr (это такжеспособ сказать карту, действительно, вы можете написать общую карту, используя foldr):

listQuest :: [Question] -> [Int]
listQuest = foldr (\x rs -> questNum x : rs) []

и старое хорошее сопоставление с образцом (это карта, но с сопоставлением с образцом):

listQuest :: [Question] -> [Int]
listQuest []  = []
listQuest (x:xs) = questNum x : listQuest xs  

ваш путь и все это эквивалентны.

В приглашении:

Затем в приглашении вы вводите что-то вроде:

$> :l file_name.hs
$> listQuest [Yes, Yes, No]
$> [1,1,0]
...