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

Отличия F# от C#

В предыдущем посте я опубликовал сравнительную реализацию алгоритма поиск индекса элемента в массиве, код на C# и D получился простой и элегантный. Несколько попыток реализации на F# аналогичной функции отняли больше времени, но показали, что это возможно, но для этого необходимо понимать назначение языковых конструкций. Классическое императивное программирование в F# недоступно. Тем не менее если изучить язык более глубоко, то можно писать неплохой код.

Ключевая концепция функционального программирования, на мой взгляд, данные как поток значений. Следовательно, и обрабатываются данные не как переменные в C#, а как массивы, последовательности или, просто, списки.
(*Реализация алгоритма поиска позиции элемента 
в массиве методом перебора на языке F#*)

let findIndexes(arr:int[], e:int) = seq {
    for i = 0 to arr.Length - 1 do
        if arr.[i] = e then
            yield i
}

let findFirstIndex(arr:int[], e:int) = findIndexes(arr,e) |> Seq.head

let arr = [|1;2;3;4;5;6;7;8;9;3;10|]
let e = 3

printfn "все найденные позиции:"

findIndexes(arr,e) |> Seq.iter(fun(i) -> printfn "{%A}" i)

let first = findFirstIndex(arr,e)
 
printfn "Первое вхождение в массив [%A]" first
 
 

Комментарии

  1. Поиск не существующего элемента вызвал ошибку на методе Seq.head. Почему-то считал, что ФП не выдают в таких случаях ошибку, а возвращают, например, значение None

    ОтветитьУдалить

Отправить комментарий

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

Кирилица в 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 какого-то зеркала не с яндекса. возможно причина в нем.