В процессе изучения F# возникла необходимость реализации алгоритма с использованием базовых конструкций языка, а именно выход из цикла по условию. Все что удалось найти в сети - это генерация и перехват исключения. Тогда мой взор вновь обратился к императивным языкам.
Задача: реализовать поиск элемента массива перебором.
Предлагаю сравнить и оценить качество реализации подобной задачи на F#.
C#:
Задача: реализовать поиск элемента массива перебором.
Предлагаю сравнить и оценить качество реализации подобной задачи на F#.
C#:
using System; namespace cs1 { class Program { static int FindIdex<T>(T[] array, T e) where T : IComparable { for (int i = 0; i < array.Length; i++) if (array[i].CompareTo(e) == 0) return i; return -1; } static void Main(string[] args) { int i = FindIdex(new int[] {1,2,3,4,5,6,7,8,9}, 3); Console.WriteLine($"index 3 = {i}"); } } }
D:
import std.stdio; int findIndex(T)(T[] array,T e) { foreach(i,c;array) if(c==e) return i; return -1; } void main() { auto arr = [1,2,3,4,5,6,7,8,9]; writeln("index 3 = ",findIndex(arr,3)); writeln("index 10 = ",findIndex(arr,10)); }
Код на ди выглядит более простым и понятным.
Обобщенное программирование на сишарпе заставило
явно указать требование о реализации оператора сравнения,
ди знает об этом на момент компиляции.
Комментарии
Отправить комментарий