OCaml:与任何负面匹配

nic*_*ine 6 ocaml pattern-matching negative-number

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

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

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

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

Chu*_*uck 11

是的,使用警卫:

match n with
    _ when n < 0 -> []
  | _ -> [x] @ clone x (n - 1)
Run Code Online (Sandbox Code Playgroud)


zrr*_*zrr 9

您可以使代码更清洁,如下所示:

match n < 0 with
| true -> []
| false -> [x] @ clone x (n - 1)
Run Code Online (Sandbox Code Playgroud)

更好的是:

if n < 0 then [] else [x] @ clone x (n - 1)
Run Code Online (Sandbox Code Playgroud)

通常,if语句比简单逻辑测试的匹配更清晰.

虽然我们在这里,但我们不妨用::它代替@:

if n < 0 then [] else x :: clone x (n - 1)
Run Code Online (Sandbox Code Playgroud)