2011-05-23 96 views
0

我是F#的新手,並試圖學習如何在F#中使用遞歸函數。我正在嘗試創建自己的功能,並且無法使其正常工作。到目前爲止,我設法做到的是獲得10個隨機數並將其打印出來。我在網上找到的這兩部分代碼。我想使用排序函數(最終它將是一個排序函數,但我沒有要求),並且無法使其工作。我把一個//放在我認爲我遇到麻煩的地方。我不知道這是什麼功能都可以,但是我我以前寫的我只是想玩弄它在使用F#函數時遇到問題

let randomNumberList count = 
     let rnd = System.Random() 
     List.init count (fun numbers -> rnd.Next (1, 1000)) 

    let rec printList listx = 
      match listx with 
     | head :: tail -> printf "%d " head; printList tail 
     | [] -> printfn "" 

    let nonSortedList = randomNumberList 10 

    printList nonSortedList 

    let rec sort list = 
     match list with 
     | head :: tail -> sort tail 
     | [] -> 0 

    sort nonSortedList//I want to send the norSorted list into the sort function 

    printList nonSortedList//print out results after putting it into the sort function 
+0

即使您在發佈後發現了您的問題,請不要刪除它們的內容。如果他們將來遇到同樣的問題,其他人可能會覺得很有幫助。 – Juliet 2011-05-23 15:22:38

+0

爲了嘗試從我生命的最後5分鐘中恢復某些東西,已經將其捲回來了;-) – 2011-05-23 15:23:29

回答

3

您還沒有分配的sort結果到任何東西。由於F#(很大程度上)是一種功能性語言,它強烈鼓勵您使用不可變的數據結構。這意味着你的數據永遠不會改變,它只是傳遞給使用數據來創建新數據表示的函數。

因此,您的排序函數不會更改列表的順序,而是應該返回一個新列表,該列表表示傳入列表的有序表示形式。由於F#期望這種行爲,如果你對結果沒有做任何事情,F#就足夠聰明,知道你可能在做一些愚蠢的事情。

所以,你應該去:

let orderedList = sort nonSortedList 
printList orderedList 

如果你真的想忽略結果 - 有時你做什麼,如果你的方法有副作用,你只是稱這是其副作用 - 你可以通過到ignore

sort nonSortedList |> ignore