有沒有辦法讓模式匹配匹配我的值與任何負數?無論負數是什麼,我只需要匹配任何負數就沒有關係。OCaml:匹配任何負數
我已經完成了我想用這個簡單的代碼是什麼:
let y = if(n < 0) then 0 else n in
match y with
0 -> []
| _ -> [x] @ clone x (n - 1)
但我想消除if
聲明,只是得到它來檢查它作爲其他情況下,在match
聲明
有沒有辦法讓模式匹配匹配我的值與任何負數?無論負數是什麼,我只需要匹配任何負數就沒有關係。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)
雖然我們正在做所有這些,但我們還引入了一個錯誤,其中'n = 0'映射到'0 :: clone x(-1)'而不是'[]'。試圖回答這個問題通常會更好,正如在查克的回答中一樣,爲了避免這種情況,以及在真實情況更復雜的情況下。 – 2013-06-25 13:42:13
哦,我明白了,我將不得不對衛兵做一些研究。謝謝! – nicotine 2010-04-29 21:47:26