haskell 中的值构造函数
Value constructors in haskell
我有一个关于 Haskell 的问题。我是新手,所以我不太了解,但是如果有人可以帮助我,我将不胜感激。我从我买的一本书中得到了这个练习。
Create a type Question with value contructors Sim or Nao. Make a
function that:
- listQuest:从参数接收 Questions 和 return 0 for Nao 或 1 for 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 ]
我在提示问题上迷路了。不知道写什么才能使用这个功能
感谢您的帮助
有几种方法可以做到这一点,您可以通过列表推导来完成,另一种方法是使用地图:
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]
我有一个关于 Haskell 的问题。我是新手,所以我不太了解,但是如果有人可以帮助我,我将不胜感激。我从我买的一本书中得到了这个练习。
Create a type Question with value contructors Sim or Nao. Make a function that:
- listQuest:从参数接收 Questions 和 return 0 for Nao 或 1 for 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 ]
我在提示问题上迷路了。不知道写什么才能使用这个功能
感谢您的帮助
有几种方法可以做到这一点,您可以通过列表推导来完成,另一种方法是使用地图:
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]