2011-12-22 12 views
4

:私はint型のリストCONCATしたいとき:x私のコードで[1, 2, 3]されています:Ocamlで[x]を使用するにはどうすればよいですか?例えば

[1、2、3] [X]

@しかし、別のケースでは、私はその機能を持っています私はprint_foofooを取って別の機能を持つ、引数である

val foo : int list 

をリストを取ることは、引数であると戻り値の型が

val print_foo : int list list 
です

私は関数を記述:この場合[foo]は型チェックによって受け入れられているが、それは 論理的な意味で正しいです:print_foo [foo]

私の質問は、ということでしょうか?この関数を書く良い方法は何ですか? [[x]]

[x]または[[x]]など、いつ、どのように、いつ、どのように使用できるのかを教えてください。

答えて

3

[x]は、1つの要素:xを含むリストを意味します。

[[x]]は、1つの要素を含むリストを意味します。1つの要素を含むリスト:x

だから、あなたはx4であると言うなら、[x] = [4]4を含むリストである、と見ての通り[[x]] = [[4]]は4

を含むリストだけを含むリストである、[x]は単純にxを置きますそれ自体でリスト。 x = [1, 2, 3](つまり、xがリストそのもの)の場合は、[x] (= [[1, 2, 3]])の関数を呼び出すことはあまりありません。リスト自体ではなく、元のリストを含むリストを与えることになります。もちろん、これは完全に正当なものであり、場合によっては必要なこともありますが、確信が持てない場合は、必要ない可能性が最も高いです。

fooint listである場合は、print_foo [foo]を呼び出して、「印刷したいリストを含むこのリストを印刷してください。おそらく、冗長リストラッパーを除外するprint_foo fooと言います。これは「印刷したいこのリストを印刷する」と解釈することができます。「

1

int list list[an_int_list, another_int_list]またはちょうど[the_single_element_which_is_an_int_list]として表現することができるactuall (int list) list、ある、どうもありがとうございました。従ってfooint listであるので、[foo](int list) listのちょうどint listのリストに過ぎません。

3

それは常にあなたが種類を持っているときに簡単です:

int listは整数を含むリストである:

# let x = [1;2;3];; 
val x : int list = [1;2;3] 
# List.hd x;; (* return the first element of x *) 
- : int = 1 

int list listint listを含むリストである:

# let y = [x;[4;5]];; 
val y : int list list = [[1;2;3];[4;5]] 
# List.hd y;; (* return the first element of y *) 
- : int list = [1;2;3] 

等々。

また、あなたは整数リストxで整数リスト[1;2;3]を連結したい場合は、あなたが使用する必要があります。

[1;2;3] @ x 

@として'a list -> 'a list -> 'a list、すなわちを入力しています。同じ種類の2つのリストを取り、同じ種類の新しいリストを返します。

関連する問題