type A =
{
...
id: int;
...
}
これができたらいいのに
let Add (x:A) (y:A) =
match x,y with
| {x.id=0,y.id=1} -> ...
x
そして、y
(関数が対称になるように)の順序を気にしない場合、関数を定義するためのトリックはありますか?また、パラメーターがtuple (x,y)
高階関数であるかどうかは気にしませんx,y
type A =
{
...
id: int;
...
}
これができたらいいのに
let Add (x:A) (y:A) =
match x,y with
| {x.id=0,y.id=1} -> ...
x
そして、y
(関数が対称になるように)の順序を気にしない場合、関数を定義するためのトリックはありますか?また、パラメーターがtuple (x,y)
高階関数であるかどうかは気にしませんx,y
この別の構文は次のとおりです。
let add x y =
match x, y with
| {id = 0}, {id = 1} | {id = 1}, {id = 0} -> ..
| _ -> ..
http://msdn.microsoft.com/en-us/library/dd547125.aspxのレコード パターン セクションを参照してください。
let add (x: A) (y: A) =
match x.id, y.id with
| 0, 1 | 1, 0 -> (* do some thing *)
| _ -> (* do some thing else *)
フィールドのみを気にする場合は、そのフィールドで直接パターン マッチングを行います。また、 Or パターンを使用して対称関数を使用できます。