Posted on:
Last modified:
以 haskell 为例,简单来说,pattern 就像是数学中的分段函数。通过使用 pattern matching, 就可以对不同的参数定义不同的函数体。当调用函数的时候,可以通过对比实参和形参的模式就可以 选择正确的函数体。
比较一下
和对应的 haskell 代码:
fib 0 = 1
fib 1 = 1
fib n | n >= 2
= fib (n-1) + fib (n-2)
注意在分段函数中 "n ≥ 2" 这个条件在 haskell 中变成了一个 guard。但是另外两个条件就是简单的 pattern。Pattern 就是可以测试值和结构的条件,比如 x:xs
, (x, y, z)
, 或者 x
。在一个分段函数定义中,基于 =
或者 ∈
的条件会变成简单的 pattern,而其他的更广义的条件会变成 guard。如果用 guard 来重写一下上面的函数:
fib n | n == 0 = 1
| n == 1 = 1
| n >= 2 = fib (n-1) + fib (n-2)
© 2016-2022 Yifei Kong. Powered by ynotes
All contents are under the CC-BY-NC-SA license, if not otherwise specified.
Opinions expressed here are solely my own and do not express the views or opinions of my employer.
友情链接: MySQL 教程站