2017-06-05 6 views
3

例:split [1;3;2;4;7;9];;
出力:([1;3;7;9], [2;4])F# - 奇数 - 偶数リストのタプルに分割リストに(要素の位置ではなく、別)

私はF#に新たなんだと私はそれを把握することはできません。
組み込み関数partitionは使用できません。

これは私がこれまで持っているものです。

let rec split xs = 
    match xs with 
    | [] -> [], [] 
    | xs -> xs, [] 
    | xh::xt -> let odds, evens = split xt 
       if (xh % 2) = 0 then xh::odds, xh::evens 
       else xh::odds, evens 

固定コード:

let rec split xs = 
    match xs with 
    | [] -> [], [] 
    | xh::xt -> let odds, evens = split xt 
       if (xh % 2) = 0 then odds, xh::evens 
       else xh::odds, evens 

*私の誤りを指摘し@TheInnerLightのおかげ:到達できない場合や、不必要に修正オッズ

+1

これは宿題のように見えますので、あなたの教授にスタックオーバーフローの助けを借りてきたことを教えてください。これを行う最善の方法は、この質問へのリンク( 'https:// stackoverflow.com/q/44379239 /')をあなたの宿題のコメントに入れることです。あなたの教授の方針によっては助けを求める際には、そうする必要があるかもしれませんが、宿題をしたときに得た助けを完全に開示することは常に良い考えです。 – rmunn

+0

今後これを見つけるかもしれない他の人を助けるために質問を編集していただきありがとうございます。しかし、スタックオーバーフローでは、質問のタイトルに「(解決済み)」を入れる必要はありません。答えを緑色のチェックマークを付けて受け入れたという事実は、その事実を伝えるのに十分であり、実際には人々は*問題のタイトルを「(解決済み)」にしてください。あなたの意欲はとても高く評価されます。 :-) – rmunn

答えて

8

内蔵のList.partition機能を使用できます

let splitOddEven xs = 
    xs |> List.partition (fun x -> x % 2 <> 0) 
splitOddEven [1;3;2;4;7;9];; 
val it : int list * int list = ([1; 3; 7; 9], [2; 4]) 

あなたは再帰的な実装をしたい場合は、私はおそらくこのような末尾再帰の実装のために行くだろう:これはあなたに逆に2つの結果のリストを与えること

let splitOddEven xs = 
    let rec splitOddEvenRec oddAcc evenAcc xs = 
     match xs with 
     | [] -> oddAcc, evenAcc 
     | xh::xt -> 
      if (xh % 2) = 0 then splitOddEvenRec oddAcc (xh :: evenAcc) xt 
      else splitOddEvenRec (xh :: oddAcc) evenAcc xt 
    splitOddEvenRec [] [] xs 

splitOddEven [1;3;2;4;7;9] 

は注意注文することができます。

+0

それはまさに私が欲しいものです。しかし、私はこの問題のList.partition関数を使用することはできません。私はその機能がどのように機能し、問題を解決しようとしているのか調べます。どうもありがとう! –

+0

@SergioRosalesちょうど再帰的な実装も追加されました。 – TheInnerLight

+0

@SergioRosales問題ありません。参考までに、あなたが*ほとんど*の質問で提供した実装。 '| 'を削除すると、 (xh%2)= 0ならxh :: odds、xh :: evens'と置き換えて、xh :: evensはxh- '、あなたは別の実装を実装しています。その実装は、再帰的呼び出しを行うことが関数が行う最後のものではないので、末尾再帰的ではありません。だから私はあなたに何か違うものを見せたいのです。 – TheInnerLight

関連する問題