我是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
答案 0 :(得分:3)
您没有将sort
的结果分配给任何内容。
由于F#(很大程度上)是一种函数式语言,因此它强烈建议您使用不可变数据结构。这意味着您的数据永远不会改变,它只是传递给使用数据创建该数据的新表示的函数。
因此,您的排序函数不会更改列表的顺序,而应返回一个新列表,表示传入列表的有序表示。
由于F#期望这种行为,如果你不对结果做任何事情,F#就足够聪明地知道你可能做了些蠢事。
所以你应该去:
let orderedList = sort nonSortedList
printList orderedList
如果你真的想忽略这些结果 - 有时你会这样做,如果你的方法有副作用而你只是为它的副作用调用它 - 你可以将结果传递给ignore
sort nonSortedList |> ignore