haskell 中的值构造函数

Value constructors in haskell

我有一个关于 Haskell 的问题。我是新手,所以我不太了解,但是如果有人可以帮助我,我将不胜感激。我从我买的一本书中得到了这个练习。

Create a type Question with value contructors Sim or Nao. Make a function that:

我试过这段代码:

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 ]

我在提示问题上迷路了。不知道写什么才能使用这个功能

感谢您的帮助

有几种方法可以做到这一点,您可以通过列表推导来完成,另一种方法是使用地图:

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

更短

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

using foldr(也是map的一种说法,确实可以用foldr写出一般的map):

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

和老好的模式匹配(是map,但是有模式匹配):

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

你的方式,以及所有这些,都是等价的。

On the prompt:

然后在提示符下键入如下内容:

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