私は F# が初めてで、リストを 2 つに分割するメソッド分割を作成しようとしています。最初の要素が分割する要素の数で、2 番目の要素が list であるタプルを取ります。たとえば、split (2, [1;2;3;4;5;6]) は ([1;2], [3;4;5;6]) を返す必要があります。
これは私がこれまでに持っているものですが、何らかの理由でタプルの2番目の要素を元のリストとしてヘッドなしで返しています。x::xs は自動的に x を先頭要素にし、xs をリストの残りの要素にするので、これは理解できません。これは、再帰呼び出しが前のリストの末尾を取得し、最初の項を切り捨てることを意味します。
let rec split = function
|(n, []) -> ([], [])
|(0, xs) -> ([], xs)
|(n, x::xs) -> let temp = x :: fst (split(n-1, xs))
(temp, xs);;