Haskell 语言 函数定义与模式匹配基础教程

Haskell阿木 发布于 2025-06-23 7 次阅读


Haskell 语言函数定义与模式匹配基础教程

Haskell 是一种纯函数式编程语言,以其简洁、表达力强和易于理解而著称。在 Haskell 中,函数是构建程序的基本单元,而模式匹配则是其核心特性之一。本文将围绕 Haskell 语言中的函数定义与模式匹配进行详细介绍,帮助读者打下坚实的 Haskell 编程基础。

函数定义

在 Haskell 中,函数定义使用 `let` 关键字,格式如下:

haskell

let 函数名 参数 = 表达式


以下是一个简单的函数定义示例,该函数计算两个整数的和:

haskell

let add x y = x + y


在这个例子中,`add` 是函数名,`x` 和 `y` 是参数,`x + y` 是函数体。

函数类型

在 Haskell 中,函数类型使用箭头 `->` 表示,表示函数的输入和输出类型。以下是一个带有类型声明的函数定义示例:

haskell

add :: Int -> Int -> Int


add x y = x + y


在这个例子中,`add` 函数接受两个 `Int` 类型的参数,并返回一个 `Int` 类型的结果。

多参数函数

Haskell 允许定义多参数函数。以下是一个计算三个整数乘积的函数定义:

haskell

mul :: Int -> Int -> Int -> Int


mul x y z = x y z


默认参数

Haskell 支持默认参数,允许在函数定义中为参数指定默认值。以下是一个具有默认参数的函数定义示例:

haskell

add' :: Int -> Int -> Int


add' x y = x + y


add' x = x + 0


在这个例子中,`add'` 函数有两个参数,第二个参数 `y` 有默认值 `0`。

模式匹配

模式匹配是 Haskell 的另一个核心特性,它允许根据输入值的结构来选择不同的执行路径。在 Haskell 中,模式匹配通常用于函数定义和列表处理。

简单模式匹配

以下是一个使用模式匹配的函数定义示例,该函数根据输入值的类型返回不同的结果:

haskell

greet :: a -> String


greet x = case x of


"Alice" -> "Hello, Alice!"


"Bob" -> "Hello, Bob!"


_ -> "Hello, stranger!"


在这个例子中,`greet` 函数使用 `case` 语句进行模式匹配。如果输入值是 `"Alice"`,则返回 `"Hello, Alice!"`;如果输入值是 `"Bob"`,则返回 `"Hello, Bob!"`;否则返回 `"Hello, stranger!"`。

复杂模式匹配

Haskell 支持更复杂的模式匹配,包括列表、元组、构造器等。以下是一个处理列表的函数定义示例:

haskell

sumList :: [Int] -> Int


sumList [] = 0


sumList (x:xs) = x + sumList xs


在这个例子中,`sumList` 函数使用递归和模式匹配来计算列表中所有整数的和。`[]` 匹配空列表,返回 `0`;`(x:xs)` 匹配非空列表,其中 `x` 是列表的第一个元素,`xs` 是剩余的列表。

构造器模式匹配

Haskell 中的数据类型通常使用构造器来创建。以下是一个使用构造器模式匹配的函数定义示例:

haskell

data Person = Person {name :: String, age :: Int}


greetPerson :: Person -> String


greetPerson (Person name age) = "Hello, " ++ name ++ "! You are " ++ show age ++ " years old."


在这个例子中,`Person` 是一个数据类型,它有两个字段:`name` 和 `age`。`greetPerson` 函数使用模式匹配来访问 `Person` 类型的实例的字段。

总结

本文介绍了 Haskell 语言中的函数定义和模式匹配基础。通过学习这些概念,读者可以更好地理解 Haskell 的编程范式和语言特性。函数定义是构建程序的基本单元,而模式匹配则提供了强大的数据处理能力。通过不断练习和探索,读者可以逐渐掌握 Haskell 编程的精髓。