HUGS 98: различия между версиями

54 байта добавлено ,  1 год назад
м
<source> -> <syntaxhighlight> (phab:T237267)
м (<source> -> <syntaxhighlight> (phab:T237267))
 
Как известно, в 40-х годах XX&nbsp;ве́ка появились первые цифровые компьютеры, которые программировались при помощи переключения различного ро́да тумблеров, проводков и кнопок, а впоследствии при помощи перфокарт и перфолент. Число таких переключений достигало порядка нескольких сотен и неумолимо росло с ростом сложности программ. Иногда происходило так, что лаборанты путали стопки перфокарт, что влекло за собой долгие поиски причин неправильной работы созданной программы. Поэтому следующим шагом развития программирования стало создание различных ассемблерных языков с простой мнемоникой. Например:
 
<sourcesyntaxhighlight lang="asm"> MOV AX, 5
MOV BX, 4
ADD AX, BX</sourcesyntaxhighlight>
 
Однако даже ассемблеры не могли стать инструментом, удобным для пользования, так как мнемокоды всё ещё оставались слишком сложными, тем более что всякий ассемблер был жёстко связан с архитектурой компьютера, на котором он исполнялся. Таким образом, следующим шагом после ассемблера стали так называемые императивные языки высокого уровня (BASIC, Pascal, C, Modula и прочие, включая объектно-ориентированные). Императивными такие языки были названы по причине того, что главным их свойством является ориентированность, в первую очередь, на последовательное исполнение инструкций, оперирующих с памятью (т.&nbsp;е. присваиваний), и итеративные циклы. Вызовы функций и процедур, даже рекурсивные, не избавляли такие языки от явной императивности (предписания)&nbsp;[9].
'''Пример 1. Быстрая сортировка Хоара на языке C:'''
 
<sourcesyntaxhighlight lang="c"> void quickSort (int a[], int l, int r)
{
int i = l;
if (l < j) quickSort (a, l, j);
if (i < r) quickSort (a, i, r);
}</sourcesyntaxhighlight>
 
'''Пример 2. Быстрая сортировка Хоара на абстрактном функциональном языке:'''
'''Пример 3. Быстрая сортировка Хоара на языке Haskell:'''
 
<sourcesyntaxhighlight lang="haskell"> quickSort [] = []
quickSort (x:xs) = quickSort [y | y <- xs, y < x] ++ [x] ++ quickSort [y | y <- xs, y >= x]</sourcesyntaxhighlight>
 
Как видно, даже на таком простом примере функциональный стиль программирования выигрывает и по количеству написанного кода и по его элегантности.
583

правки