以下是一种声明我猜的功能的方法(纠正我)&我想用相同的风格做类似的事情,但它不起作用,为什么?
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是一个参数,但我们有|所以我很困惑!
答案 0 :(得分:2)
这是模式匹配的定义,它与
相同fun length ls = case ls of
nil => 0
| _::l' => 1 + (length l')
但更简洁,更易读。
您的功能会收到警告,因为您只匹配3
和4
,但没有其他整数。
如果你写
,你会得到同样的警告fun x n = case n of
3 => 0
| 4 => 1
匹配所有可能的值将消除警告:
fun x 3 = 0
| x 4 = 1
| x _ = 2