Python 尝试学习F#…整数排序列表
在过去的几个月里,我一直在使用Python,现在我正试着给F#一个尝试。只是…我真的不明白。在过去的几天里,我一直在阅读文档,但仍然不完全理解如何完成基本任务 我一直在关注tryfsharp.org和fsharp.net上的教程 例如,我如何完成用Python编写的基本任务,而不是用F#Python 尝试学习F#…整数排序列表,python,sorting,f#,Python,Sorting,F#,在过去的几个月里,我一直在使用Python,现在我正试着给F#一个尝试。只是…我真的不明白。在过去的几天里,我一直在阅读文档,但仍然不完全理解如何完成基本任务 我一直在关注tryfsharp.org和fsharp.net上的教程 例如,我如何完成用Python编写的基本任务,而不是用F# unsorted=[82,9,15,8,21,33,4,89,71,7] 排序=[] 对于范围(1,len(未排序))中的n: 最低=0 对于范围(0,len(未排序)-1中的i: 如果未排序[i]let mi
unsorted=[82,9,15,8,21,33,4,89,71,7]
排序=[]
对于范围(1,len(未排序))中的n:
最低=0
对于范围(0,len(未排序)-1中的i:
如果未排序[i]<未排序[最低]:
最低=i
已排序。追加(未排序[最低])
del unsorted[最低]
打印排序
请注意,您的python版本不正确。它输出:
[4, 8, 9, 15, 21, 33, 71, 82, 89]
缺少7
这是一个直接的F#翻译:
let unsorted = new ResizeArray<int> ([| 82; 9; 15; 8; 21; 33; 4; 89; 71; 7 |])
let sorted = new ResizeArray<int> ()
for n=1 to unsorted.Count-1 do
let mutable lowest = 0
for i=0 to unsorted.Count-1 do // i changed this line so the output is correct.
if unsorted.[i] < unsorted.[lowest] then
lowest <- i
sorted.Add(unsorted.[lowest])
unsorted.RemoveAt(lowest)
printfn "%A" (sorted |> Seq.toArray)
let unsorted=new ResizeArray([82;9;15;8;21;33;4;89;71;7 |])
let sorted=新的大小调整数组()
对于n=1到未排序。计数-1 do
设可变最小值=0
对于i=0到unsorted.Count-1 do//,我更改了此行以便输出正确。
如果未排序,[i]
翻译后的版本与Python版本几乎完全相同。但这不是编写F#程序的理想方式。对于F#中的排序算法,您可以在我的博客上阅读一篇博文:
我意识到,如果您想要直接翻译,这可能不是您想要的,但是F#和函数式编程倾向于强调声明式编程而不是命令式语言。例如,如果要对数字列表进行排序,只需对其进行排序:
let unsorted = [2; 9; 15; 8; 21; 33; 4; 89; 71; 7]
let sorted = unsorted |> List.sort
//now print em out
sorted |> List.iter (printfn "%d")
如果你在摸索F#时遇到困难,不妨读一读函数式编程,帮助你理解为什么F#会有不同的做法。在将代码从命令式语言移植到函数式语言时,应该尝试转换代码中使用的算法,而不是代码本身 代码正在执行一个任务,因此您想问自己,选择排序是做什么的
- 求最小值
- 把它放在排序列表的前面
- 对其余项目进行排序,将结果放在最小值之后
let rec selection\u sort=函数
| [] -> []
|l->let min=List.min l in(*找到最小值*)
让rest=List.filter(fun i->i min)l in(*找到其余部分*)
让排序的\u rest=选择项\u排序rest in(*对其余部分排序*)
min::已排序的_rest(*将所有内容放在一起*)
非常地道。但我真正喜欢F#/Ocaml的是,它可以让你用两种方式来做,就像这样,或者像尹朱给出的版本。“我在过去几个月一直在使用Python,现在正在尝试给F#一次尝试……但仍然不完全理解如何完成基本任务。”别担心,在使用F#的最初几周里,你会有这种感觉,然后它点击,你无法想象不使用F#。
let unsorted = [2; 9; 15; 8; 21; 33; 4; 89; 71; 7]
let sorted = unsorted |> List.sort
//now print em out
sorted |> List.iter (printfn "%d")