2011-05-23 67 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