Haskell - Mô-đun
Nếu bạn đã làm việc trên Java, thì bạn sẽ biết cách tất cả các lớp được liên kết vào một thư mục được gọi là package. Tương tự, Haskell có thể được coi là một tập hợp củamodules.
Haskell là một ngôn ngữ chức năng và mọi thứ được biểu thị dưới dạng một biểu thức, do đó Mô-đun có thể được gọi là một tập hợp các loại chức năng tương tự hoặc có liên quan.
Bạn có thể importmột chức năng từ một mô-đun này sang một mô-đun khác. Tất cả các câu lệnh "nhập" phải xuất hiện trước trước khi bạn bắt đầu xác định các hàm khác. Trong chương này, chúng ta sẽ tìm hiểu các tính năng khác nhau của các mô-đun Haskell.
Mô-đun danh sách
List cung cấp một số chức năng tuyệt vời để làm việc với listnhập dữ liệu. Sau khi nhập mô-đun Danh sách, bạn có nhiều chức năng theo ý của mình.
Trong ví dụ sau, chúng tôi đã sử dụng một số chức năng quan trọng có sẵn trong mô-đun Danh sách.
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])
Ở đây, chúng ta có nhiều chức năng mà không cần xác định chúng. Đó là bởi vì các chức năng này có sẵn trong mô-đun Danh sách. Sau khi nhập mô-đun Danh sách, trình biên dịch Haskell làm cho tất cả các chức năng này có sẵn trong không gian tên chung. Do đó, chúng tôi có thể sử dụng các chức năng này.
Mã của chúng tôi sẽ mang lại kết quả sau:
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]
Mô-đun Char
Các Charmô-đun có rất nhiều chức năng được xác định trước để làm việc với loại Character. Hãy xem khối mã sau:
import Data.Char
main = do
putStrLn("Different methods of Char Module")
print(toUpper 'a')
print(words "Let us study tonight")
print(toLower 'A')
Tại đây, các chức năng toUpper và toLower đã được xác định bên trong Charmô-đun. Nó sẽ tạo ra kết quả sau:
Different methods of Char Module
'A'
["Let","us","study","tonight"]
'a'
Mô-đun bản đồ
Maplà kiểu dữ liệu kiểu cặp giá trị gia tăng không được sắp xếp. Nó là một mô-đun được sử dụng rộng rãi với nhiều chức năng hữu ích. Ví dụ sau đây cho thấy cách bạn có thể sử dụng một chức năng được xác định trước có sẵn trong mô-đun Bản đồ.
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)
Nó sẽ tạo ra kết quả sau:
fromList [(1,[1]),(2,[2]),(3,[3])]
Đặt mô-đun
Mô-đun Set có một số chức năng được xác định trước rất hữu ích để thao tác với dữ liệu toán học. Một tập hợp được thực hiện dưới dạng cây nhị phân, vì vậy tất cả các phần tử trong một tập hợp phải là duy nhất.
Hãy xem đoạn mã ví dụ sau
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)
Ở đây, chúng tôi đang sửa đổi một Chuỗi thành một Tập hợp. Nó sẽ tạo ra kết quả sau. Quan sát rằng tập hợp đầu ra không có ký tự lặp lại.
fromList " Hbdeuy"
fromList " HTaefhiklorstu"
Mô-đun tùy chỉnh
Hãy xem cách chúng ta có thể tạo một mô-đun tùy chỉnh có thể được gọi ở các chương trình khác. Để triển khai mô-đun tùy chỉnh này, chúng tôi sẽ tạo một tệp riêng có tên"custom.hs" cùng với của chúng tôi "main.hs".
Hãy để chúng tôi tạo mô-đun tùy chỉnh và xác định một vài chức năng trong đó.
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
Mô-đun tùy chỉnh của chúng tôi đã sẵn sàng. Bây giờ, chúng ta hãy nhập nó vào một chương trình.
main.hs
import Custom
main = do
print(showEven 4)
print(showBoolean True)
Mã của chúng tôi sẽ tạo ra kết quả sau:
True
1
Các showEven hàm trả về True, vì "4" là một số chẵn. CácshowBoolean hàm trả về "1" là hàm Boolean mà chúng ta đã truyền vào hàm là "True".