В предыдущем посте я опубликовал сравнительную реализацию алгоритма поиск индекса элемента в массиве, код на C# и D получился простой и элегантный. Несколько попыток реализации на F# аналогичной функции отняли больше времени, но показали, что это возможно, но для этого необходимо понимать назначение языковых конструкций. Классическое императивное программирование в F# недоступно. Тем не менее если изучить язык более глубоко, то можно писать неплохой код.
Ключевая концепция функционального программирования, на мой взгляд, данные как поток значений. Следовательно, и обрабатываются данные не как переменные в C#, а как массивы, последовательности или, просто, списки.
Ключевая концепция функционального программирования, на мой взгляд, данные как поток значений. Следовательно, и обрабатываются данные не как переменные в 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
Поиск не существующего элемента вызвал ошибку на методе Seq.head. Почему-то считал, что ФП не выдают в таких случаях ошибку, а возвращают, например, значение None
ОтветитьУдалить