Haskell - 模組



如果你使用過 Java,那麼你應該知道所有類是如何繫結到一個名為的資料夾中的。類似地,Haskell 可以被認為是模組的集合。

Haskell 是一種函式式語言,所有內容都表示為表示式,因此模組可以被稱為相似或相關型別函式的集合。

你可以從一個模組匯入函式到另一個模組。所有“匯入”語句都應該在開始定義其他函式之前出現。在本章中,我們將學習 Haskell 模組的不同特性。

列表模組

列表提供了一些用於處理列表型別資料的優秀函式。一旦你匯入了 List 模組,你就可以使用各種各樣的函式。

在下面的示例中,我們使用了一些 List 模組中可用的重要函式。

import Data.List  

main = do  
   putStrLn("Different methods of List Module") 
   print(intersperse '.' "Tutorialspoint.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 模組有許多預定義的函式來處理字元型別。請檢視以下程式碼塊:

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)    

在這裡,我們將字串修改為集合。它將產生以下輸出。請注意,輸出集合中沒有字元重複。

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 

我們的自定義模組已準備就緒。現在,讓我們將其匯入到程式中。

main.hs

import Custom 

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

我們的程式碼將生成以下輸出:

True
1

showEven 函式返回True,因為“4”是偶數。showBoolean 函式返回“1”,因為我們傳遞給函式的布林函式為“True”。

廣告