1

再帰関数で整数のリストをリストのタプルに変換しようとしています。

整数のリストがあり、これをさまざまな側でオッズとイーブンを分割[1;2;3;4;5;6;7;8]したいとしましょう([1;3;5;7],[2;4;6;8])

私は期待される結果などの多くの問題に直面しており、整数のリストであるという偶数'a list * 'a listを持っています。'b * 'c'b & 'c

4

1 に答える 1

6

特に再帰関数を要求したので..:

let partitionNumbers nums =
    let rec impl odds evens = function
      | []                   -> odds, evens
      | n::ns when n % 2 = 1 -> impl (n::odds) evens ns
      | n::ns                -> impl odds (n::evens) ns
    List.rev nums |> impl [] []

ただし、より慣用的なアプローチは、(ほぼ常に)高階関数を使用することです。

let partitionNumbers = List.partition (fun n -> n % 2 = 1)
于 2012-10-04T20:49:32.570 に答える