2017-03-10 38 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