使用F#功能时遇到问题

时间:2011-05-23 15:08:53

标签: f# tail-recursion

我是F#的新手,并试图学习如何在F#中使用递归函数。我正在尝试创建自己的功能,并且无法让它工作。到目前为止我设法做的是得到10个随机数并打印出来。我在网上找到的这两段代码。我想使用sort函数(最终它将是一个排序函数,但我不是要求它)并且无法使它工作。我把//放在我认为遇到麻烦的地方。我不确定这个函数会做什么,但正如我之前写的那样,我只想尝试使用它

   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

1 个答案:

答案 0 :(得分:3)

您没有将sort的结果分配给任何内容。

由于F#(很大程度上)是一种函数式语言,因此它强烈建议您使用不可变数据结构。这意味着您的数据永远不会改变,它只是传递给使用数据创建该数据的新表示的函数。

因此,您的排序函数不会更改列表的顺序,而应返回一个新列表,表示传入列表的有序表示。

由于F#期望这种行为,如果你不对结果做任何事情,F#就足够聪明地知道你可能做了些蠢事。

所以你应该去:

let orderedList = sort nonSortedList
printList orderedList 

如果你真的想忽略这些结果 - 有时你会这样做,如果你的方法有副作用而你只是为它的副作用调用它 - 你可以将结果传递给ignore

sort nonSortedList |> ignore