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)
您可以使代码更清洁,如下所示:
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)