Haskell程序 遍历枚举
在Haskell中,枚举(或 “enum”)是一种具有有限值集的类型。这些值被称为构造函数,并且通常使用data关键字来定义。
这里有一个表示四季的枚举类型的例子–
data Season = Spring | Summer | Fall | Winter
枚举被用来表示像状态、模式或选项这样的东西,它们有一组固定的可能值。
方法1:对枚举类型进行迭代
这个方法是用来直接迭代Haskell中的枚举类型的。在这里,我们定义了所有枚举值的列表。用于显示值的实例被创建。在对列表进行迭代后,每个输出值都被显示出来。
算法
- 第1步 – 定义颜色的数据类型。
-
第2步–所有枚举值的列表被定义。
-
第3步 – 显示颜色的实例被创建。
-
第4步 – 程序的执行将从主函数开始。main()函数拥有程序的全部控制权。列表正在被迭代。
-
第5步 – 颜色被映射,最终输出被打印。
示例
在下面的例子中,我们将对枚举类型进行迭代
data Color = Red | Blue | Green
colors :: [Color]
colors = [Red, Blue, Green]
instance Show Color where
show Red = "Red"
show Blue = "Blue"
show Green = "Green"
main :: IO ()
main = mapM_ print colors
输出
Red
Blue
Green
方法2:在Haskell中使用列表理解对枚举进行迭代
在这个方法中,数据颜色=红色 | Blue |绿色派生(Show)定义了一个枚举类型Color,有三个构造函数。红、蓝、绿,并对颜色类型的值进行迭代,使用mapM_ print [Red … Green] 依次打印 “Red”、”Blue”、”Green”。
这里,enumFromTo函数被定义为只对红色到绿色的范围起作用。
算法
- 第1步 – Enum被定义为有三个构造函数,即红、蓝、绿。
-
第2步 – 通过使用toEnum、fromEnum、succ和pred创建Enum的实例。
-
第3步–enumFromTo用于对定义的范围进行枚举迭代。
-
第4步 – 程序的执行将从主函数开始。main()函数拥有对程序的全部控制权。
-
第5步 – 通过使用mapM_ print [Red … Green]语句,依次显示最终输出。
示例
下面的例子显示了如何在Haskell中使用列表理解对枚举进行迭代
data Color = Red | Blue | Green deriving (Show)
instance Enum Color where
toEnum 0 = Red
toEnum 1 = Blue
toEnum 2 = Green
toEnum _ = error "Invalid color"
fromEnum Red = 0
fromEnum Blue = 1
fromEnum Green = 2
succ Red = Blue
succ Blue = Green
succ Green = Red
pred Blue = Red
pred Green = Blue
pred Red = Green
enumFromTo Red Green = [Red, Blue, Green]
enumFromTo _ _ = error "Invalid range"
main :: IO ()
main = mapM_ print [Red .. Green]
输出
Red
Blue
Green
方法3:通过使用iterate和take对枚举类型进行迭代。
在这个方法中,通过对初始值Red应用nextSeason函数,迭代将在Color类型上发生3次,然后用mapM_ print打印每个结果。iterate函数通过对初始值重复应用nextSeason函数,创建了一个无限的值列表。然后用take函数取这个列表的前3个值。
算法
- 第1步 – Enum被定义为有三个构造函数,即红、蓝、绿。
-
第2步–NextSeason函数是在颜色构造器上定义的。
-
第3步 – 程序的执行将从主函数开始。main()函数拥有程序的全部控制权。枚举正在被迭代。
-
第4步 – 子类实例被调用,参数为Parent1和Parent2函数。
-
第5步 – 通过使用mapM_ print (take 3(iterate nextSeason Red))语句,依次显示最终输出。
示例
在这个例子中,我们将学习如何通过使用iterate和take对枚举类型进行迭代。
data Color = Red | Blue | Green deriving (Show)
nextSeason :: Color -> Color
nextSeason Red = Blue
nextSeason Blue = Green
nextSeason Green = Red
main :: IO ()
main = mapM_ print (take 3 (iterate nextSeason Red))
输出
Red
Blue
Green
结论
在Haskell中,枚举(或 “enum”)是一种具有有限值集的类型。这些值被称为构造函数,并且通常使用data关键字来定义。
为了迭代一个枚举类型,你可以使用mapM_, forM_, enumFromTo, iterate和take这样的函数组合。你也可以使用toEnum和fromEnum函数来转换枚举值和它们相应的整数。