头等函数 

头等函数(first-class function;第一級函數)是指在程序设计语言中,函数被当作头等公民。这意味着,函数可以作为别的函数的参数、函数的返回值,赋值给变量或存储在数据结构中。 [1] 有人主张应包括支持匿名函数(函数字面量,function literals)。[2]在这样的语言中,函数的名字没有特殊含义,它们被当作具有函数类型的普通的变量对待。[3]1960年代中期,克里斯托弗·斯特雷奇在“functions as first-class citizens”中提出这一概念。[4]

头等函数是函数式程序设计所必须的。通常要使用高阶函数map函数就是一个高阶函数,其实参是一个函数及一个list,返回结果是把作为参数的函数作用于list的每个元素后的结果形成的list。

把函数作为函数参数与函数返回值会遇到特别的困难。特别是存在非局部变量英语non-local variable嵌套函数英语nested function匿名函数。历史上,这被称作函数参数问题英语funarg problem[5] 早期的指令式编程语言,或者不支持函数作为结果类型(如ALGOL 60, Pascal),或者忽略嵌套函数与非局部变量(如C语言)。早期的函数式语言Lisp采取了动态作用域方法,把非局部变量绑定到函数执行点最近的变量定义。Scheme语言支持词法作用域的头等函数,把对函数的引用绑定到闭包(closure)而不是函数指针[4]这使得垃圾收集成为必须。

  1. ^ Abelson, Harold; Sussman, Gerald Jay. Structure and Interpretation of Computer Programs. MIT Press. 1984. Section 1.3 Formulating Abstractions with Higher-Order Procedures. ISBN 0-262-01077-1. 
  2. ^ Programming language pragmatics, by Michael Lee Scott, section 11.2 "Functional Programming".
  3. ^ Roberto Ierusalimschy; Luiz Henrique de Figueiredo; Waldemar Celes. The Implementation of Lua 5.0 (PDF). [2015-06-15]. (原始内容 (PDF)存档于2017-06-23). 
  4. ^ 4.0 4.1 Burstall, Rod; Strachey, Christopher. Understanding Programming Languages (PDF). Higher-Order and Symbolic Computation. 2000, 13 (52): 11–49 [2015-06-15]. doi:10.1023/A:1010052305354. (原始内容 (PDF)存档于2010-02-16).  (also on 2010-02-16
  5. ^ Joel Moses. "The Function of FUNCTION in LISP, or Why the FUNARG Problem Should be Called the Environment Problem"页面存档备份,存于互联网档案馆). MIT AI Memo 199, 1970.



取材自維基百科 - 中文時事百科