Функции первого класса: различия между версиями
[непроверенная версия] | [непроверенная версия] |
Содержимое удалено Содержимое добавлено
Wuzwm (обсуждение | вклад) Нет описания правки |
Wuzwm (обсуждение | вклад) Нет описания правки |
||
Строка 3:
<ref name="test">[http://www.worldcat.org/oclc/222529448 Programming language pragmatics], by Michael Lee Scott, section 11.2 "Functional Programming".</ref>
В языках с функциями первого класса имена функций не имеют никакого специального статуса, они рассматриваются как обычные переменные [[eng:Function type|типа функции]].<ref>{{cite journal |title=The Implementation of Lua 5.0 |author1=Roberto Ierusalimschy |author2=Luiz Henrique de Figueiredo |author3=Waldemar Celes |url=http://www.lua.org/doc/jucs05.pdf}}</ref>
Термин был впервые использован [[:en:Christopher Strachey|Кристофером Строчи]] в контексте «функции как объекты первого класса» в середине 1960-х. <ref name="strachey">Rod Burstall, "Christopher Strachey—Understanding Programming Languages", ''[[Higher-Order and Symbolic Computation]]'' '''13''':52 (2000)</ref>
Функции первого класса являются неотъемлемой частью [[Функциональное программирование|функционального программирования]], в котором использование [[Функции высшего порядка|функций высшего порядка]] является стандартной практикой. Простым примером функции высшего порядка будет функция ''[[Map]]'', которая принимает в качестве своих аргументов функцию и список и возвращается список, после применения функции к каждому элементу списке. Чтобы язык программирования поддерживал [[Map]], он должен поддерживать передачу функций как аргумента.
Существуют некоторые сложности в реализации передачи функций как аргументов и возвращении их как результата, особенно в присутствии [[
В ранних императивных языках программирования эти проблемы обходились путем отказа от поддержки возвращения функций как результата или отказа от вложенных функций и следовательно нелокальных переменных(в частности [[Си_(язык_программирования)|C]]). [[Lisp]], один из первых функциональных языков программирования применяет подход [[
==Концепции==
|