К основному контенту

F#: пример использования рекурсии

open System
open System.IO
open System.Diagnostics

let time f = 
    let watch = Stopwatch.StartNew()
    f()
    watch.Stop
    printfn "%A" watch.Elapsed

let rec sum xs = match xs with
    | [] -> 0
    | h::t -> h + sum(t)   

let random = new Random()
let data = List.init 1000000 (fun _ -> random.Next(Int32.MaxValue))
let rec qs xs = match xs with
    | [] -> []
    | [_] -> xs
    | h :: t -> qs([for i in t do if i<= h then yield i]) @ [h] @ qs([for i in t do if i>h then yield i])

let saveAs fn xs = 
    use stream = File.CreateText(fn)
    for v in xs do
        stream.WriteLine(sprintf "%A" v)

let saveData = 
    do saveAs "or.txt" data
    do saveAs "so.txt" (qs data)
    
time(fun _ -> printfn "sum = %A" (sum data))
time(fun _ -> printfn "sum = %A" (sum data))
time(fun _ -> qs data |> ignore)
time(fun _ -> saveData |> ignore)

printfn "done"

Комментарии

Популярные сообщения из этого блога

Кирилица в Arch Linux

После вчерашних обновлений в консоли Arch Linux при выборе русской локали вместо букв печатаются белые квадратики. Очевидно, что по какой-то причине не загружается прописанный в rc.conf шрифт. Временное лекарство от этого: выполнить команду setfont cyr-sun16 . Еще у меня в момент начальной загрузки появляется рябь на экране как от сильных электромагнитных помех в ЭЛТ, хотя у меня ЖК. Может быть это как-то связано.

Сортировка массивов в groovy

Любой массив в java и groovy можно отсортировать статическим методом: Arrays.sort(c); причем это будет очень быстро сто тысяч элементов типа int сортируются за 1 секунду на celeron M 1,8 Mg. Если это массив объектов можно использовать перегруженный метод Arrays.sort(c,comporator);

Arch Linux - руссификация консоли

Вчера, придя с работы, как всегда затеял InstallFest. Уже практически не задумываясь установил свежий арч. И тут заметил что в tty вместо русского - квадратики. Под утро нашел таки сообщение на форме, что в этом виноваты дрова от видео. Там правда речь шла о нвидиа, а у меня ати. Буду пробовать. И еще в lxterminal обратил внимание что сообщения на русском, а то что я вводил на русском потом возвращается системой в виде юникод-символов. Вот такие дела. UPDATE: драйвер не причем. переустановил в консоли(до установки X) по прежнему квадратики вместо букв. неужели придется переключатся на инглиш? Заметил что initscripts скачался c какого-то зеркала не с яндекса. возможно причина в нем.