2014-12-11 58 views
-3

嗯,我已经在这近10小时,试图在F#中解决这个履行职责

我需要排序按字母顺序排列的列表和反向列表

  • 我甚至不知道从哪里开始给他们按字母顺序排序..
  • 反向列表仅返回与所有10个元素 有人请帮助我
列表0

我想出了:

[<EntryPoint>] 
printfn "Enter 10 Names";; 
let mutable list = [for i in 1 .. 10 -> System.Console.ReadLine(); ] 
printfn "%A" list 
//let list = List.sort 
//printfn "%A" list 
let reverseList list = List.fold (fun acc elem -> elem::acc) [] list 
printfn "%A" (reverseList [for i in 1 .. 10 -> List.iteri]) 
+0

当我点击运行代码片段什么也没发生,我们应此报告元 – meda 2014-12-11 00:35:47

+0

运行的代码段用于F#不工作 - 只为HTML/JS – 2014-12-11 00:42:39

+1

见'List.sort'和' List.rev' – 2014-12-11 00:43:17

回答

5
[<EntryPoint>] 
    printfn "Enter 10 Names";; 
    let list = [for i in 1 .. 10 -> System.Console.ReadLine(); ] 
    printfn "%A" list 
    // List.sort takes 'list' as a parameter and returns sorted list 
    //(in the case of string list - alphabetically) 
    let sortedlist = List.sort list 
    printfn "%A" sortedlist 
    // List.rev takes 'sortedlist' as a parameter and returns reversed list 
    let sortedreversedlist = List.rev sortedlist 
    printfn "%A" sortedreversedlist 

或者你也可以通过List.sort功能的结果作为参数到List.rev功能,而不将其分配给变量:

let sortedreversedlist' = List.rev (List.sort list) 
printfn "%A" sortedreversedlist' 

也F#有管道运算符'|>',可用于在列表上创建'管道'操作(将前一个函数的结果重定向到下一个)。使用模式匹配和抽象掉谓词逻辑将是另一种选择

let sortedreversedlist'' = list |> List.sort |> List.rev 
printfn "%A" sortedreversedlist'' 
0

OK,线程是够漂亮了,但:它允许以不同的方式编写的功能相同的顺序(顺序,他们将执行) :

let reverseComparer expr = 
match expr with 
    | true -> -1 
    | false -> 1 
    | _ -> 0 

let reversedNames = names |> List.sortWith (fun previous follower -> reverseComparer (previous > follower)) 
0
let list = [ "bbc"; "CNN"; "cnn"; "abc"; "1"; "ABC"; "BBC"; "2"] 
    let sortedList = Set.toList(Set.ofList list) 
    let reversedList = List.rev sortedList;; 
+1

好的答案提供了对代码的解释 – 2015-06-11 18:29:40