有没有办法让模式匹配将我的值与任何负数匹配?负数是什么并不重要,我只需要匹配任何负数。
我已经用这个简单的代码完成了我想要的:
let y = if(n < 0) then 0 else n in
match y with
0 -> []
| _ -> [x] @ clone x (n - 1)
但我想消除该if
语句,只是让它检查它作为match
语句中的另一种情况
有没有办法让模式匹配将我的值与任何负数匹配?负数是什么并不重要,我只需要匹配任何负数。
我已经用这个简单的代码完成了我想要的:
let y = if(n < 0) then 0 else n in
match y with
0 -> []
| _ -> [x] @ clone x (n - 1)
但我想消除该if
语句,只是让它检查它作为match
语句中的另一种情况
是的,使用警卫:
match n with
_ when n < 0 -> []
| _ -> [x] @ clone x (n - 1)
您可以像这样使您的代码更简洁:
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)
有关键字when。按头(我现在无法测试)
让 y = 匹配 n 与 | 当 n < 0 -> 0 | 0 -> [] | _ -> [x] @ 克隆 x (n - 1)
但是,即使您的示例也不应该起作用。一方面,您返回一个 int,另一方面返回一个列表。