2012-04-25 8 views
9

これを行うためのクリーンな方法はありますか?OCaml - タプル内のリスト参照とのパターンマッチング

match a with 
| _, l -> match !l with 
    | (c, n)::t -> doSomething 

は、のような何か他のものとaを一致させる方法があるではないでしょう:私は、私が見つけた唯一の方法は、これをやっていた

(a' option * (char * nodeType) list ref

のパターンマッチングをやろうとしています。 ..

match a with 
| _, ref (c,n)::t -> doSomething 

...またはそれに類するものは?この例では、別の試合をするだけでは重く見えませんが、実際には多少の違いがあります。

ありがとうございます。

答えて

11

ref型が可変フィールドを持つレコードのように定義されます。

type 'a ref = { 
    mutable contents : 'a; 
} 

これは、あなたがこのようにレコード構文を使用して、それに対するパターンマッチができることを意味します:OCamlでは

match a with 
| _, { contents = (c,n)::t } -> doSomething 
+5

(これは完全に同期しています) –

11

ref密かに、contentsという名前の変更可能なフィールドを持つレコードです。

match a with 
| _, { contents = (c, n) :: t } -> (* Do something *) 
関連する問題