Haskell 程序将列表转换为集合
Haskell 编程具有 fromList、Set.fromList 和 foldr 等内部函数,可用于将列表转换为集合。在第一个示例中,我们将使用 (listToSet = Set.fromList) 函数,在第二个示例中,我们将直接从 main 函数调用 (set = Set.fromList xs) 函数。而在第三个示例中,我们将使用 (listToSet = foldr Set.insert Set.empty) 函数。
算法
步骤 1 - 导入限定的 Data.Set 模块。
步骤 2 - 使用 fromList 函数定义 listToSet 函数,如下所示:
listToSet = Set.fromList。
步骤 3 - 程序执行将从 main 函数开始。main() 函数控制整个程序。它写成 main = do。
步骤 4 - 定义变量 'xs',它将保存要转换为集合的列表值。
步骤 5 - 调用函数后,将对应于列表值的最终集合值打印到控制台。
示例 1
在此示例中,使用 fromList 函数将列表转换为集合。
import qualified Data.Set as Set listToSet :: Ord a => [a] -> Set.Set a listToSet = Set.fromList main :: IO () main = do let xs = [1, 2, 3, 2, 1, 4] set = listToSet xs putStrLn $ "List: " ++ show xs putStrLn $ "Set: " ++ show (Set.toList set)
输出
[1 of 1] Compiling Main ( main.hs, main.o ) Linking main ... List: [1,2,3,2,1,4] Set: [1,2,3,4]
示例 2
在此示例中,使用 main 函数中的 fromList 函数将列表转换为集合。
import qualified Data.Set as Set main :: IO () main = do let xs = [1, 2, 3, 2, 1, 4] set = Set.fromList xs putStrLn $ "List: " ++ show xs putStrLn $ "Set: " ++ show (Set.toList set)
输出
[1 of 1] Compiling Main ( main.hs, main.o ) Linking main ... List: [1,2,3,2,1,4] Set: [1,2,3,4]
示例 3
在此示例中,使用用户定义函数使用 fromList 函数将列表转换为集合。
import qualified Data.Set as Set listToSet :: Ord a => [a] -> Set.Set a listToSet xs = Set.fromList [x | x <- xs] main :: IO () main = do let xs = [1, 2, 3, 2, 1, 4] set = listToSet xs putStrLn $ "List: " ++ show xs putStrLn $ "Set: " ++ show (Set.toList set)
输出
[1 of 1] Compiling Main ( main.hs, main.o ) Linking main ... List: [1,2,3,2,1,4] Set: [1,2,3,4]
示例 4
在此示例中,使用 foldr 函数将列表转换为集合。
import qualified Data.Set as Set listToSet :: Ord a => [a] -> Set.Set a listToSet = foldr Set.insert Set.empty main :: IO () main = do let xs = [1, 2, 3, 2, 1, 4] set = listToSet xs putStrLn $ "List: " ++ show xs putStrLn $ "Set: " ++ show (Set.toList set)
输出
[1 of 1] Compiling Main ( main.hs, main.o ) Linking main ... List: [1,2,3,2,1,4] Set: [1,2,3,4]
结论
在 Haskell 中,列表是有序的相同类型元素的集合,而集合是相同类型不同元素的无序集合。将列表转换为集合的过程包括删除任何重复项并对剩余元素进行排序。Haskell 提供了 Data.Set 模块,该模块定义了 Set 类型和用于处理集合的多个函数。要将列表转换为集合,我们通常使用 Data.Set 模块中的 fromList 函数。我们也可以使用 foldr 函数进行此转换。