возникли проблемы с использованием функций F # - PullRequest
0 голосов
/ 23 мая 2011

Я новичок в F # и пытаюсь научиться использовать рекурсивную функцию в F #. Я пытаюсь поиграть с созданием своей собственной функции, и мне трудно заставить ее работать. Мне удалось сделать 10 случайных чисел и распечатать их. Обе части кода, которые я нашел в Интернете. Я хочу использовать функцию сортировки (в конечном итоге это будет функция сортировки, но я не прошу этого), и у меня возникли проблемы с ее работой. Я положил //, где я думаю, у меня возникли проблемы. Я не уверен, что эта функция будет делать, но, как я писал ранее, я просто пытаюсь поиграть с ней

   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

1 Ответ

3 голосов
/ 23 мая 2011

Вы никому не присваиваете результаты sort.

Поскольку F # (в значительной степени) является функциональным языком, он настоятельно рекомендует использовать неизменяемые структуры данных. Это означает, что ваши данные никогда не меняются, они просто передаются функциям, которые используют данные для создания новых представлений этих данных.

Таким образом, ваша функция сортировки не меняет порядок списка, скорее она должна вернуть новый список, который представляет упорядоченное представление переданного списка.

Поскольку F # ожидает такого поведения, если вы ничего не делаете с результатами, F # достаточно умен, чтобы знать, что вы, вероятно, делаете что-то глупое.

Итак, вы должны идти:

let orderedList = sort nonSortedList
printList orderedList 

Если вы действительно хотите игнорировать результаты - что иногда бывает, если у вашего метода есть побочные эффекты, и вы просто вызываете его для получения побочных эффектов - вы можете передать результаты на ignore

sort nonSortedList |> ignore
...