Программы, написанные на языках программирования высокого уровня перед выполнением на ЭВМ должны транслироваться в эквивалентные программы, написанные на машинном коде. icon

Программы, написанные на языках программирования высокого уровня перед выполнением на ЭВМ должны транслироваться в эквивалентные программы, написанные на машинном коде.


1 чел. помогло.
Смотрите также:
Рабочая программа по курсу “Программирование на языках высокого уровня” Факультет экономический...
Основные разделы программы Программирование на языке высокого уровня Операционные системы...
Роль и значение языка паскаль в эволюции языков программирования...
Данное пособие поможет написать сочинения для школьников. Внем собраны лучшие сочинения...
Эти произведения автора не относятся к относительно совершенным в литературно духовном и т п...
Параллельные программы главный тормоз 11 2 mpi 11 3 Реализации mpi 12 4 Средства...
«Теория игр и исследование операций» Направления нк, нп 4 курс, 1-й семестр (2008/09 уч год)...
Программы Организации Объединенных Наций по окружающей среде комитет высокого уровня министров...
Рабочая программа по дисциплине Основы алгоритмизации и программирования (язык С/C++) Для...
Составление программы на языке программирования...
Литература [Абрамов89] Абрамов С. А., Зима Е. В...
Алгоритмизация и программирование. Языки программирования высокого уровня...



Загрузка...
страницы: 1   2   3   4   5   6   7   8
вернуться в начало
скачать
^

Функции высших порядков


Основная статья: Функция высшего порядка

Функции высших порядков — это такие функции, которые могут принимать в качестве аргументов и возвращать другие функции.[2] Примерами таких функций в математическом анализе являются производная и первообразная.

Функции высших порядков весьма схожи с функциями первого класса, оба типа позволяют иметь на выходе и в качестве аргумента функцию. Грань между этими типами функций довольно тонкая: функции высших порядков это математическая концепция функций, оперирующих другими функциями, а функции первого класса — термин компьютерных наук, описывающий конструкцию языка, не имеющую ограничений на свое использование (функция первого порядка может использоваться всюду в программе, как и другие сущности первого класса, к примеру число, включая возможность быть аргументом других функций и быть на выходе у них).[источник не указан 214 дней]

Функции высших порядков позволяют использовать карринг — преобразование функции от пары аргументов в функцию, берущую свои аргументы по одному. Это преобразование получило свое название в честь Х. Карри.
^

Чистые функции


Чистые функции не имеют побочных эффектов ввода-вывода и памяти (они зависят только от своих параметров и возвращают только свой результат). Чистые функции обладают несколькими полезными свойствами, многие из которых можно использовать для оптимизации кода:[источник не указан 214 дней]

  • Если результат чистой функции не используется, он может быть удален без вреда для других выражений.

  • Если чистая функция вызывается с параметрами без побочных эффектов, то результат в виде константы заносится в таблицу параметров (иногда это называется принципом прозрачности ссылок), то есть если функция снова вызывается с этим параметром, то возвращается этот же результат.

  • Если нет никакой зависимости по данным между двумя чистыми функциями, то порядок их вычисления можно поменять или распараллелить (говоря иначе вычисление чистых функций удовлетворяет принципам thread-safe)

  • Если весь язык не допускает побочных эффектов, то можно использовать любую политику вычисления. Это предоставляет свободу компилятору комбинировать и реорганизовывать вычисление выражений в программе (например, исключить древовидные структуры).

До тех пор пока большинство компиляторов императивных языков программирования распознают чистые функции и удаляют общие подвыражения для вызовов чистых функций, они не смогут делать это всегда для предварительно скомпилированных библиотек, которые, как правило, не предоставляют эту информацию. Некоторые компиляторы, такие как gcc, в целях оптимизации предоставляют программисту ключевые слова для обозначения чистых функций. Fortran 95 позволяет обозначать функции как «pure» (чистые).[источник не указан 214 дней]

Рекурсия


^ Основная статья: Рекурсия

В функциональных языках цикл обычно реализуется в виде рекурсии. Строго говоря, в функциональной парадигме программирования нет такого понятия как цикл. Рекурсивные функции вызывают сами себя, позволяя операции выполняться снова и снова. Для использования рекурсии может потребоваться большой стек, но этого можно избежать в случае хвостовой рекурсии. Хвостовая рекурсия может быть распознана и оптимизирована компилятором в код, получаемый после компиляции аналогичной итерации в императивном языке программирования. Стандарты языка Scheme требуют распознавать и оптимизировать хвостовую рекурсию. Оптимизировать хвостовую рекурсию можно путём преобразования программы в стиле использования продолжений при её компиляции, как один из способов.[источник не указан 214 дней]

Рекурсивные функции можно обобщить с помощью функций высших порядков, используя, например, катаморфизм и анаморфизм (или «свертка» и «развертка»). Функции такого рода играют роль такого понятия как цикл в императивных языках программирования.[источник не указан 214 дней]
^

Подход к вычислению аргументов


Функциональные языки можно классифицировать по тому, как обрабатываются аргументы функции в процессе её вычисления. Технически различие заключается в денотационной семантике выражения. К примеру выражение

print length([2+1, 3*2, 1/0, 5-4])

При строгом подходе к вычислению на выходе будет ошибка, так как в третьем элементе присутствует деление на ноль. А при нестрогом подходе функция вернет значение 4. При строгом вычислении заранее подсчитываются значения всех аргументов перед вычислением самой функции. При нестрогом подходе значение аргументов не вычисляется до тех пор, пока их значение не понадобится при вычислении функции[3].

Как правило нестрогий подход реализуется в виде редукции графа. Нестрогое вычисление используется по умолчанию в нескольких чисто функциональных языках, в том числе Miranda, Clean и Haskell.[источник не указан 214 дней]
^

Функциональное программирование в нефункциональных языках


Принципиально нет препятствий для написания программ в функциональном стиле на языках, которые традиционно не считаются функциональными (точно так же, как программы в объектном стиле можно писать на обычных структурных языках). Некоторые императивные языки поддерживают типичные для функциональных языков конструкции, такие как функции высшего порядка и дополнение списков (list comprehensions), что облегчает использование функционального стиля в этих языках.[источник не указан 214 дней]

В языке C указатели на функцию могут быть использованы для получения эффекта функций высшего порядка. Функции высшего порядка и отложенная списковая структура реализованы в библиотеках С++. В языке C# версии 3.0 и выше можно использовать λ-функции для написания программы в функциональном стиле. В сложных языках, типа Алгол-68, имеющиеся средства метапрограммирования (фактически — дополнения языка новыми конструкциями) позволяют создать специфичные для функционального стиля объекты данных и программные конструкции, после чего можно писать функциональные программы с их использованием.

Основной особенностью функционального программирования, определяющей как преимущества, так и недостатки данной парадигмы, является то, что в ней реализуется модель вычислений без состояний. Если императивная программа на любом этапе исполнения имеет состояние, то есть совокупность значений всех переменных, и производит побочные эффекты, то чисто функциональная программа ни целиком, ни частями состояния не имеет и побочных эффектов не производит. То, что в императивных языках делается путём присваивания значений переменным, в функциональных достигается путём передачи выражений в параметры функций. Непосредственным следствием становится то, что чисто функциональная программа не может изменять уже имеющиеся у неё данные, а может лишь порождать новые путём копирования и/или расширения старых. Следствием того же является отказ от циклов в пользу рекурсии.[источник не указан 214 дней]




оставить комментарий
страница7/8
Дата02.10.2011
Размер0.79 Mb.
ТипДокументы, Образовательные материалы
Добавить документ в свой блог или на сайт

страницы: 1   2   3   4   5   6   7   8
хорошо
  1
отлично
  1
Ваша оценка:
Разместите кнопку на своём сайте или блоге:
rudocs.exdat.com

Загрузка...
База данных защищена авторским правом ©exdat 2000-2017
При копировании материала укажите ссылку
обратиться к администрации
Анализ
Справочники
Сценарии
Рефераты
Курсовые работы
Авторефераты
Программы
Методички
Документы
Понятия

опубликовать
Загрузка...
Документы

Рейтинг@Mail.ru
наверх