Функции первого класса: различия между версиями

[непроверенная версия][непроверенная версия]
Содержимое удалено Содержимое добавлено
в воложенных -> вО вложенных
м орфография
Строка 8:
 
Существуют некоторые сложности в реализации передачи функций как аргументов и возвращении их как результата, особенно в присутствии [[:en:non-local variable|нелокальных переменных]], введенных во [[:en:Nested function|вложенных]] и [[Анонимная функция|анонимных функциях]]. Исторически они были названы [[Проблема фунарга|проблемами фунарга]], от английского «function argument».<ref>[[Joel Moses]]. [https://dspace.mit.edu/handle/1721.1/5854 «The Function of FUNCTION in LISP, or Why the FUNARG Problem Should be Called the Environment Problem»]. MIT AI Memo 199, 1970.</ref>
В ранних императивных языках программирования эти проблемы обходились путем отказа от поддержки возвращения функций как результата или отказа от вложенных функций и следовательно нелокальных переменных (в частности, [[Си_(язык_программирования)|C]]). [[Lisp]], один из первых функциональных языков программирования, применяет подход [[:en:dynamic scoping|динамической области видимости]], где нелокальные переменные возвращают ближайшее определение этих переменных к точке, в которой функция была вызвана, вместо точки, в которой она была объявлена. Полноценная поддержка для [[:en:lexical scoping|лексического контекста]] функций первого порядка была введена в [[Scheme]] и предполагает обработку ссылок на функции как [[Замыкание_(программирование)|замыканий]] вместо чистых<ref name="strachey"/>, что, в свою очередь, делает необходимым применение [[Сборка мусора (программирование)|сборки мусора]].
 
== Концепции ==