SML中的函数声明?

时间:2017-01-26 06:12:53

标签: functional-programming sml ml

以下是一种声明我猜的功能的方法(纠正我)&我想用相同的风格做类似的事情,但它不起作用,为什么?

fun length nil = 0
| length (_::l') = 1 + (length l')

我想这样做而不使用"案例表达"句法。即如果函数x得到数字3则返回0否则如果它是4然后是1

fun x 3 = 0
| x (4) = 1

Here's the error
stdIn:58.5-59.12 Warning: match nonexhaustive
    3 => ...
    4 => ...

Q2)此外,功能体在哪里开始?看起来nil是一个参数,但我们有|所以我很困惑!

1 个答案:

答案 0 :(得分:2)

这是模式匹配的定义,它与

相同
fun length ls = case ls of
                    nil => 0
                  | _::l' => 1 + (length l')

但更简洁,更易读。

您的功能会收到警告,因为您只匹配34,但没有其他整数。

如果你写

,你会得到同样的警告
fun x n = case n of
              3 => 0
            | 4 => 1

匹配所有可能的值将消除警告:

fun x 3 = 0
  | x 4 = 1
  | x _ = 2