Haskell程序 遍历枚举

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函数来转换枚举值和它们相应的整数。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程