2017-03-10 37 views
0

因此,這是一週的每一天的用戶定義的數據類型天(即:週日,週一等)Ocaml程序編寫語法效率

let is_weekend_day (d:day) : bool = 
    begin match d with 
    | Sunday -> true 
    | Saturday -> true 
    | _ -> false 
    end 

有什麼辦法凝結的代碼?如果你想獲得看上你可以定義從布爾操作升降機操作員的功能

let is_weekend_day = ListLabels.mem ~set: [Saturday;Sunday];; 

ie: Sunday || Saturday -> true 

the problem with this is that it's not in syntax, but having 2 additional  
lines seems like such a waste of space! 

回答

5

您可以使用|組合圖案,即or-pattern

通過使用它,並去除多餘的類型標註,並開始/結束你會得到如下:

let is_weekend_day d = 
    match d with 
    | Sunday | Saturday -> true 
    | _ -> false 
2

你其實可以這樣寫:

let is_weekend_day = function 
    | Sunday | Saturday -> true 
    | _ -> false 

或者這操作返回布爾值的函數:

let lift op f g x = op (f x) (g x) 

然後你可以定義is_weekend_day這樣的:

let is_weekend_day = lift (||) ((=) Saturday) ((=) Sunday) 

它讀取更漂亮,如果你讓lift (||)到運營商:

let (|||) a b = lift (||) a b 

let is_weekend_day = ((=) Saturday) ||| ((=) Sunday) 

let is_mwf = ((=) Monday) ||| ((=) Wednesday) ||| ((=) Friday) 

OCaml的語法是靈活的。

+0

你的所有版本後,第一個是效率較低,具有較小的靜態檢查,你不應該勸他們。 – Drup