2016-05-07 32 views
-6

私はこの作業のためにList.hdList.tlを使用しようとしました:OCaml:リストの最初の要素を返すと、それをリストから削除できますか?

let takeCard fst deck = 
fst = List.hd deck 
List.tl deck 

List.hdは2つの引数を取りますが、私は理由を理解していません。

+0

コンテンツの品質を向上させるのに役立つこの[URL](http://stackoverflow.com/help)をご確認ください –

+0

'fst = List.hd deck'は' fst'と 'deck'の最初の要素を比較します結果を無視します。 – molbdnilo

答えて

1

私はここにいくつかの誤解があると思います。

まず、OCamlのほとんどのタイプは不変です。 mutable変数を使用しない限り、「リストから削除する」ことはできません。最初の項目を持たないバージョンのリストのみを返すことができます。両方を返す場合は、tupleを使用してそれを達成することができます。

let takeCard deck = (List.hd deck, List.tl deck) 

第2に、List.hdは1つの要素しか取りません。 OCamlはcurryingを利用しています。 OCaml型のシグネチャを読むとき、最初のパラメータは関数が取り込むものであり、最後のパラメータは関数が返すものです。したがって、List.hdの署名'a list -> 'aは、('aがプレースホルダとして使用される)リストを取り込み、リストに含まれる種類のもの(この場合は最初の要素)を返します。

関連する問題