2012-10-04 109 views
1

我想將整數列表轉換爲遞歸函數中的列表元組。將整數列表轉換爲列表元組

比方說,我有一個整數爲[1;2;3;4;5;6;7;8]的名單,我希望把它變成([1;3;5;7],[2;4;6;8])分賠率和埃文斯在不同的側面

我面臨着很多問題,如預期的結果是'a list * 'a list和我有一個'b * 'c即使tho 'b & 'c是整數列表。

+0

燦你向我們展示你迄今爲止的代碼? – pad

+0

那麼我有的代碼是不同的,是別的東西的一部分,但我可以寫一個示例代碼; 讓REC oddEven LST 匹配LST與 [] - >([],[]) | X :: XS - >如果(X%2 = 0),那麼... 否則如果(X%2> 0)然後... ;;; 我是f#的新手,現在有點卡住了。 –

+4

您的代碼片段不完整,並且不顯示您面臨的問題。請考慮添加一個完整且有用的示例。 – pad

回答

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 [] [] 

然而,更地道的做法是(如幾乎 -always)使用高階函數:

let partitionNumbers = List.partition (fun n -> n % 2 = 1)