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

[непроверенная версия][непроверенная версия]
Содержимое удалено Содержимое добавлено
Спасено источников — 1, отмечено мёртвыми — 0. #IABot (v1.6.1)
Строка 1:
В [[информатика|информатике]] [[язык программирования]] имеет '''функции первого класса''', если он рассматривает функции как [[Объект первого класса|объекты первого класса]]. В частности, это означает, что язык поддерживает передачу функций в качестве аргументов другим функциям, возврат их как результат других функций, присваивание их переменным или сохранение в структурах данных<ref>{{cite book|first1=Harold|last1=Abelson|authorlink1=Harold Abelson|first2=Gerald Jay|last2=Sussman|authorlink2=Gerald Jay Sussman|title=[[Structure and Interpretation of Computer Programs]]|at=Section 1.3 [http://mitpress.mit.edu/sicp/full-text/book/book-Z-H-12.html#call_footnote_Temp_121 Formulating Abstractions with Higher-Order Procedures]|publisher=MIT Press|year=1984|isbn=0-262-01077-1}}</ref>.
Некоторые теоретики языков программирования считают необходимым условием также поддержку [[Анонимные функции|анонимных функций]]<ref name="test">[http://www.worldcat.org/oclc/222529448 Programming language pragmatics], by Michael Lee Scott, section 11.2 «Functional Programming».</ref>.
В языках с функциями первого класса имена функций не имеют никакого специального статуса, они рассматриваются как обычные значения, тип которых является [[Функциональный тип|функциональным]]<ref>{{cite journalстатья |titleзаглавие=The Implementation of Lua 5.0 |author1ссылка=http://www.lua.org/doc/jucs05.pdf |язык=und |автор=Roberto Ierusalimschy; |author2=Luiz Henrique de Figueiredo; |author3=Waldemar Celes |url=http://www.lua.org/doc/jucs05.pdf}}</ref>.
Термин был впервые использован {{iw|Стрэчи, Кристофер|Кристофером Стрэчи|en|Christopher Strachey}} в контексте «функции как объекты первого класса» в середине 1960-х<ref name="strachey">Rod Burstall, «Christopher Strachey—Understanding Programming Languages», ''[[Higher-Order and Symbolic Computation]]'' '''13''':52 (2000)</ref>.