6

有没有办法让模式匹配将我的值与任何负数匹配?负数是什么并不重要,我只需要匹配任何负数。

我已经用这个简单的代码完成了我想要的:

let y = if(n < 0) then 0 else n in   
match y with  
0 -> []  
| _ -> [x] @ clone x (n - 1)

但我想消除该if语句,只是让它检查它作为match语句中的另一种情况

4

3 回答 3

11

是的,使用警卫:

match n with
    _ when n < 0 -> []
  | _ -> [x] @ clone x (n - 1)
于 2010-04-29T21:38:20.313 回答
9

您可以像这样使您的代码更简洁:

match n < 0 with
| true -> []
| false -> [x] @ clone x (n - 1)

更好的是:

if n < 0 then [] else [x] @ clone x (n - 1)

一般来说,if 语句比简单逻辑测试的匹配更清晰。

当我们这样做时,我们不妨使用::代替@

if n < 0 then [] else x :: clone x (n - 1)
于 2010-04-30T02:04:13.523 回答
0

有关键字when。按头(我现在无法测试)

让 y = 匹配 n 与 | 当 n < 0 -> 0 | 0 -> [] | _ -> [x] @ 克隆 x (n - 1)

但是,即使您的示例也不应该起作用。一方面,您返回一个 int,另一方面返回一个列表。

于 2010-04-29T21:37:20.333 回答