模式匹配是 Haskell 中的一种强大特性,用于检查数据结构并从中提取值。以下是一些常见的模式匹配用法示例:
函数定义中的模式匹配
-- 定义一个计算阶乘的函数
factorial :: Integer -> Integer
factorial 0 = 1
factorial n = n * factorial (n - 1)
列表模式匹配
-- 计算列表的长度
length' :: [a] -> Int
length' [] = 0
length' (_:xs) = 1 + length' xs
元组模式匹配
-- 解构元组
addPairs :: (Int, Int) -> (Int, Int) -> (Int, Int)
addPairs (a, b) (c, d) = (a + c, b + d)
case
表达式中的模式匹配
-- 使用 case 表达式进行模式匹配
describeList :: [a] -> String
describeList xs = case xs of
[] -> "The list is empty."
[x] -> "The list has one element."
_ -> "The list has multiple elements."
where
子句中的模式匹配
-- 使用 where 子句进行模式匹配
headAndTail :: [a] -> (a, [a])
headAndTail xs = (head xs, tail xs)
where
head (x:_) = x
tail (_:xs) = xs
let
表达式中的模式匹配
-- 使用 let 表达式进行模式匹配
letExample :: (Int, Int)
letExample = let (a, b) = (1, 2) in (a + b, a - b)
数据类型中的模式匹配
-- 定义一个简单的二叉树数据类型
data Tree a = Empty | Node a (Tree a) (Tree a)
-- 计算二叉树的深度
treeDepth :: Tree a -> Int
treeDepth Empty = 0
treeDepth (Node _ left right) = 1 + max (treeDepth left) (treeDepth right)
通过这些示例,我们可以看到 Haskell 中模式匹配的多种用法。模式匹配使得代码更加简洁和易读,同时也增强了类型安全性。