F # выбор сортировки по списку случайных чисел - PullRequest
3 голосов
/ 24 мая 2011

Я новичок в F # и пытаюсь понять некоторые основы, но медленно спотыкаюсь.В приведенном ниже коде я пытаюсь создать список случайных целых чисел и затем отсортировать его.

let randomNumberList count =
    let r = System.Random()
    List.init count (fun _ -> r.Next(100))

let rec selectionSort l = function
    | [] -> []
    | l -> let min = List.min l in
           let rest = List.filter (fun i -> i <> min) l in
           let sortedList = selectionSort rest in
           min :: sortedList
sortedList = selectionSort l

let unsortedList = randomNumberList 10
printfn "%A" unsortedList
printfn "%A" sortedList

Итак, две вещи ... одна ошибка, которую я получаю:

stdin(515,19): error FS0001: This expression was expected to have type
    'a list    
but here has type
    'a list -> 'a list

Другой со списком случайных чисел.Это работает, но я хочу, чтобы сгенерированные числа были меньше 100 вместо огромных значений, которые я получаю сейчас.

Спасибо за ваше терпение и помощь!

1 Ответ

1 голос
/ 24 мая 2011

Как указано в комментарии, нет необходимости в l в let rec selectionSort. Фиксированный код:

let randomNumberList count =
    let r = System.Random()
    List.init count (fun _ -> r.Next(100))

let rec selectionSort = function
    | [] -> []
    | l -> let min = List.min l in
           let rest = List.filter (fun i -> i <> min) l in
           let sortedList = selectionSort rest in
           min :: sortedList

let unsortedList = randomNumberList 10
let sortedList = selectionSort unsortedList
printfn "%A" unsortedList
printfn "%A" sortedList
System.Console.ReadLine() |> ignore

Пояснение:

let vname = function
   | ... -> ...
   | ... -> ...

является краткой формой

let vname arg = match arg with
   | ... -> ...
   | ... -> ...
...