OCaml:匹配任何负数
问题描述:
有没有办法让模式匹配匹配我的值与任何负数?无论负数是什么,我只需要匹配任何负数就没有关系。OCaml:匹配任何负数
我已经完成了我想用这个简单的代码是什么:
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)
答
有关键字时。由头(我现在不能测试)
让y =与n匹配 |当n < 0 - > 0 | 0 - > [] | _ - > [x] @ clone x(n - 1)
然而,即使你的例子不应该工作。一方面你返回一个int,另一方面是一个列表。
答
你可以让你的代码干净了一点这样的:
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)
+0
虽然我们正在做所有这些,但我们还引入了一个错误,其中'n = 0'映射到'0 :: clone x(-1)'而不是'[]'。试图回答这个问题通常会更好,正如在查克的回答中一样,为了避免这种情况,以及在真实情况更复杂的情况下。 – 2013-06-25 13:42:13
哦,我明白了,我将不得不对卫兵做一些研究。谢谢! – nicotine 2010-04-29 21:47:26