Haskell-case

Haskell - case

函数中模板匹配的本质实际上就是case语句的语法糖。case语句在函数式编程中用途往往比命令式要大很多,因为这样可以很流畅的定义出一个没有指令流程的函数,使得函数的定义更加流畅。
举一个简单的例子

1
2
3
firstLetterV1 :: [a] -> a
firstLetterV1 [] = error "Null list"
firstLetterV1 [x:_] = x

完全等价于这段代码

1
2
3
firstLetterV2 :: [a] -> a
firstLetterV2 str = case str of [] -> error "Null list"
(x:_) -> x

从中我们可以看到case表达式语法长这个样子

1
2
3
4
case expression of pattern -> result
pattern -> result
pattern -> result
-- ....

于是乎就可以写出这样的代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
scoreValue :: Int -> Char
scoreValue value =
let range = div value 10
in case range of 6 -> 'D'
7 -> 'C'
8 -> 'B'
9 -> 'A'
10 -> 'S'
_ -> 'F'

describeList :: [a] -> String
describeList ls = "The list is " ++ str ls
where str [] = "empty"
str [x] = "a singleton list"
str ls = "a longer list"

Haskell-case
http://cvrain.cloudvl.cn/2023/11/21/Haskell/haskell-case/
作者
ClaudeRainer
发布于
2023年11月21日
许可协议