Функция разделения связанного списка и обратные результаты

Я написал эту функцию на F # для разделения списка до определенного момента и не дальше - как нечто среднее между takeWhile и ] раздел .

let partitionWhile c l =
    let rec aux accl accr =
        match accr with
        | [] -> (accl, [])
        | h::t ->
            if c h then
                aux (h::accl) t
            else
                (accl, accr)
    aux [] l

Единственная проблема заключается в том, что "взятые" элементы меняются местами:

> partitionWhile ((>=) 5) [1..10];;
val it : int list * int list = ([5; 4; 3; 2; 1], [6; 7; 8; 9; 10])

Помимо вызова rev , существует ли способ написать эту функцию, которая имела бы первый список должен быть в правильном порядке?

7
задан Rei Miyasaka 26 August 2011 в 01:25
поделиться