2014-12-11 3 views
-3

Ну я был у него в течение почти 10 часов, пытаясь решить эту проблему в F #Выполнение функций на список в F #

Мне нужно, чтобы отсортировать список в алфавитном порядке, и обратный список по

  • Я даже не знаю, с чего начать, чтобы отсортировать их в алфавитном порядке ..
  • Реверс список только возвращает список с для всех 10 элементов Кто-то пожалуйста, помогите мне

То, что я придумал:

[<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

+0

Run фрагмент кода не работает на F # - только для HTML/JS –

+1

См 'List.sort' и' List.rev' –

ответ

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

нормально, нить достаточно довольно старая, но другой вариант, используя поиск по шаблону и абстрагируясь от логики предикатов будут :

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

Хорошие ответы дают объяснение кода –