当前位置: 首页 > 文档资料 > Haskell 中文教程 >

模块( Modules)

优质
小牛编辑
122浏览
2023-12-01

如果您已经使用过Java,那么您就会知道如何将所有类绑定到名为package的文件夹中。 同样,Haskell可以被视为modules的集合。

Haskell是一种函数式语言,所有东西都表示为表达式,因此可以将模块称为类似或相关类型的函数的集合。

您可以import功能从一个模块导入另一个模块。 在开始定义其他函数之前,应首先使用所有“import”语句。 在本章中,我们将学习Haskell模块的不同功能。

列表模块

List提供了一些很棒的函数来处理list类型数据。 导入List模块后,您可以使用各种功能。

在以下示例中,我们使用了List模块下可用的一些重要功能。

import Data.List  
main = do  
   putStrLn("Different methods of List Module") 
   print(intersperse '.' "iowiki.com") 
   print(intercalate " " ["Lets","Start","with","Haskell"]) 
   print(splitAt 7 "HaskellTutorial") 
   print (sort [8,5,3,2,1,6,4,2])

在这里,我们有许多功能,甚至没有定义它们。 这是因为这些功能在List模块中可用。 导入List模块后,Haskell编译器在全局命名空间中提供了所有这些功能。 因此,我们可以使用这些功能。

我们的代码将产生以下输出 -

Different methods of List Module
"T.u.t.o.r.i.a.l.s.p.o.i.n.t...c.o.m"
"Lets Start with Haskell"
("Haskell","Tutorial")
[1,2,2,3,4,5,6,8]

字符模块

Char模块有许多预定义的函数可以使用Character类型。 看看下面的代码块 -

import Data.Char 
main = do  
   putStrLn("Different methods of Char Module") 
   print(toUpper 'a') 
   print(words "Let us study tonight") 
   print(toLower 'A')

这里, toUppertoLower函数已经在Char模块中定义。 它将产生以下输出 -

Different methods of Char Module
'A'
["Let","us","study","tonight"]
'a'

地图模块

Map是未排序的增值对类型数据类型。 它是一个广泛使用的模块,具有许多有用的功能。 以下示例显示如何使用Map模块中可用的预定义函数。

import Data.Map (Map) 
import qualified Data.Map as Map  --required for GHCI  
myMap :: Integer -> Map Integer [Integer] 
myMap n = Map.fromList (map makePair [1..n]) 
   where makePair x = (x, [x])  
main = print(myMap 3)

它将产生以下输出 -

fromList [(1,[1]),(2,[2]),(3,[3])] 

设置模块

Set模块有一些非常有用的预定义函数来操作数学数据。 集合实现为二叉树,因此集合中的所有元素必须是唯一的。

看一下下面的示例代码

import qualified Data.Set as Set   
text1 = "Hey buddy"   
text2 = "This tutorial is for Haskell"   
main = do  
   let set1 = Set.fromList text1   
       set2 = Set.fromList text2 
   print(set1) 
   print(set2)    

在这里,我们将String修改为Set。 它将产生以下输出。 观察输出集没有重复的字符。

fromList " Hbdeuy"
fromList " HTaefhiklorstu"

定制模块

让我们看看我们如何创建一个可以在其他程序中调用的自定义模块。 要实现这个自定义模块,我们将创建一个名为"custom.hs"的单独文件以及我们的"main.hs"

让我们创建自定义模块并在其中定义一些函数。

custom.hs

module Custom ( 
   showEven, 
   showBoolean 
) where 
showEven:: Int-> Bool 
showEven x = do 
if x 'rem' 2 == 0 
   then True 
else False 
showBoolean :: Bool->Int 
showBoolean c = do 
if c == True 
   then 1 
else 0 

我们的Custom模块准备就绪。 现在,让我们将其导入程序。

main.hs

import Custom 
main = do 
   print(showEven 4) 
   print(showBoolean True) 

我们的代码将生成以下输出 -

True
1

showEven函数返回True ,因为“4”是偶数。 showBoolean函数返回“1”,因为我们传递给函数的布尔函数是“True”。