2016-04-14 11 views
1

2つのリストを追加しようとしましたが、型の使用を考えました。OCamlで型を返す

type x = int list; 

let add (elem1 : int) (elem2 :int) = 
    elem1 + elem2;; 

let add2Lists (a : x) (b : x) = 
    List.map2 add a b;; 

驚いたことに、add2Listsはx - > x - > int listを返します。 intリストは本質的に型と同じですが、add2Listsを文字通りx型の値に評価する方法を教えてください。の種類に依存して、特定のタイプ(の彼らは(に評価し、実際に)返す関数が種類を返しませんが、参考までに値を

let add2Lists (a : x) (b : x) : x = 
    List.map2 add a b;; 

答えて

2

型制約を追加します。議論)。だから、あなたの質問は、 "を文字通りタイプxの値に評価するにはどうすればいいですか?"または、より正確には、「報告された結果タイプをadd2Listsにするには、どうすればxにするのですか?」

+0

ありがとうございます!申し訳ありませんが、新しい言語です。 「:x」の部分が何を意味するのか説明できますか? これはちょうどx型の値を返すと言っていますか?またはそれより大きな意味がある – halapgos1

+0

':x'構文はいくつかの異なる構文で現れますが、"基本的な "意味は常に"私は '': 'の左側にあるものが' x'型であると主張します。唯一の問題は、左に何があるのか​​...引数の場合は、それは 'a'、次に' b'です。カッコはそれを明確にします。 'let'宣言や式の最後の':x'の場合は、関数(引数付き)が作成されているかどうかによって異なります。そうであれば、関数の結果の型に適用されます。そうでない場合は、パターン(通常は単一の変数)に適用されます。 – antron

+0

'let foo:int = ...' 'foo'は' int'型でなければならないが、 'let fx:int = ...'は 'f'が何かから' int 'である。それはちょっと混乱していて、私の好きな構文部分ではありません。 – antron