Язык программирования Euphoria | страница 2



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

* подпрограммы Euphoria естественным образом универсальны. Пример программы, который вы найдете чуть ниже, демонстрирует единственную подпрограмму, которая одинаково успешно сортирует данные любого типа : целые числа, числа с плавающей точкой, строки и т.д. При этом Euphoria не является "объектно-ориентированным" языком, а достигает многих преимуществ этих языков значительно более простым путём.

* система программирования Euphoria полностью свободна и открыта.


1.1 Пример программы

Здесь представлен пример завершённой программы Euphoria.


>~~~~~~~~~~~


>sequence list, sorted_list


>function merge_sort(sequence x)

>-- сортирует x в порядке возрастания методом рекурсивного слияния

>integer n, mid

>sequence merged, a, b


>n = length(x)

>if n = 0 or n = 1 then

> return x -- тривиальный случай

>end if


>mid = floor(n/2)

>a = merge_sort(x[1..mid]) -- сортируется первая половина x

>b = merge_sort(x[mid+1..n]) -- сортируется вторая половина x


>-- слияние двух отсортированных половинок

>merged = {}

>while length(a) 0 and length(b) 0 do

>if compare(a[1], b[1]) then

>merged = append(merged, a[1])

>a = a[2..length(a)]

>else

>merged = append(merged, b[1])

>b = b[2..length(b)]

>end if

>end while

>return merged & a & b -- слитые данные плюс остатки

>end function


>procedure print_sorted_list()

>-- генерирует sorted_list из list

>list = {9, 10, 3, 1, 4, 5, 8, 7, 6, 2}

>sorted_list = merge_sort(list)

>? sorted_list

>end procedure


>print_sorted_list() -- эта команда запускает программу


~~~~~~~~~~~


Данный пример содержит 4 отдельные команды, которые выполняются последовательно. Первая объявляет две переменные: list и sorted_list как ряды (sequence) (гибкие массивы). Вторая определяет функцию merge_sort(). Третья определяет процедуру print_sorted_list(). Четвёртая и последняя команда вызывает процедуру print_sorted_list() на исполнение.

Программа печатает на экране:

{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}.


merge_sort() так же легко отсортирует {1.5, -9, 1e6, 100} или {"oranges", "apples", "bananas"} .


Данный пример имеется в каталоге Euphoria -- euphoria\tutorial\example.ex . Это не самый быстрый из методов сортировки, доступных в Euphoria. Перейдите в каталог -- euphoria\demo -- и введите команду "ex allsorts", чтобы проверить хронометраж различных алгоритмов сортировки при возрастании числа сортируемых объектов. Быстрый учебный пример программирования аналогичной функции на Euphoria вы можете также найти в --