2016-03-31 15 views
1
let rec morse2 c s1 s2 = match s1 with 
| [] -> [] 
| g::r when (caps c = g) -> List.hd(s2) 
| g::r -> morse2 c r (List.tl(s2));; 

val morse2 : char -> char list -> 'a list list -> 'a list = <fun> 

こんにちは、あるOCamlでは、なぜこのタイプ「リストのリストではなく」リスト

私の機能は、charと二つのリストは、最初の1文字のリストであり、第二のに想定され得ます何らかの理由で文字列のリストであるが、文字列のリストのみを受け入れる。関数がしていることは基本的に、最初のリストのcharが入力として与えられたcharと一致するかどうかをチェックし、そうであれば、文字列ではなく文字列リストであると考えられる2番目のリストの同じ位置の要素を返します。

caps c関数は、大文字の文字のみを変換します。

答えて

2

| [] -> []は、関数がリストを返すことをコンパイラに通知すると、| g::r when (caps c = g) -> List.hd(s2)行は関数がList.hd(s2)を返すことができることをコンパイラに通知します。したがってList.hd(s2)はリストでなければならず、s2はリストのリストでなければなりません。

関連する問題