2017-03-10 5 views
0

だからこれは、各曜日のユーザー定義のデータ型の日です(例:等の日曜日、月曜日、)OCamlの構文効率

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

コードを凝縮する方法はありますか?

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 = ListLabels.mem ~set: [Saturday;Sunday];; 

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

それともこれをブール値を返す関数を操作する:

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

そして、あなたはこのようis_weekend_day定義することができます:あなたはオペレーターにlift (||)を作る場合

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

をそれも、もっとうまく読み:

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

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

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

OCamlの構文は柔軟性があります。

+0

あなたのすべてのバージョンで最初のものはあまり効率的であり、より少ない静的チェックをした後、あなたがそれらを助言するべきではありません。 – Drup