OCaml:与任何负面匹配

时间:2010-04-29 21:20:04

标签: pattern-matching ocaml negative-number

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

我用这个简单的代码完成了我想要的东西:

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

但我想删除if语句,并将其作为match语句中的另一个案例进行检查

3 个答案:

答案 0 :(得分:10)

是的,请使用警卫:

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

答案 1 :(得分:9)

您可以使代码更加清晰:

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

更好的是:

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

通常,如果语句比简单逻辑测试的匹配更清晰。

在我们处理此问题时,我们也可以使用::代替@

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

答案 2 :(得分:0)

有关键字when。按头(我现在不能测试)

让y =与n匹配 |当n < 0 - &gt; 0 | 0 - &gt; [] | _ - &gt; [x] @ clone x(n - 1)

但是,即使你的例子也不行。一方面,你返回一个int,另一方面返回一个列表。