頭等函數

- { zh - cn: 頭等函數; zh - tw: 一級函式; } - （ first - class function ； 第一級函數 ） 是指在程序設計語言中 ， 函數被當作頭等公民 。 這意味着 ， 函數可以作爲別的函數的參數 、 函數的返回值 ， 賦值給變量或存儲在數據結構中 。 有人主張應包括支持匿名函數 （ 函數字面量 ， function literals ） 。 在這樣的語言中 ， 函數的名字沒有特殊含義 ， 它們被當作具有函數類型的普通的變量對待 。 1960年代中期 ， 克里斯托弗 · 斯特雷奇在 “ functions as first - class citizens ” 中提出這一概念 。 - { zh - cn: 頭等函數; zh - tw: 一級函式; } - 是函數式程序設計所必須的 。 通常要使用高階函數 。 map函數就是一個高階函數 ， 其實參是一個函數及一個list ， 返回結果是把作爲參數的函數作用於list的每個元素後的結果形成的list 。 把函數作爲函數參數與函數返回值會遇到特別的困難 。 特別是存在與 、 匿名函數 。 歷史上 ， 這被稱作 。 早期的指令式編程語言 ， 或者不支持函數作爲結果類型 （ 如ALGOL 60, Pascal ） ， 或者忽略嵌套函數與非局部變量 （ 如C語言 ） 。 早期的函數式語言Lisp採取了動態作用域方法 ， 把非局部變量綁定到函數執行點最近的變量定義 。 Scheme語言支持詞法作用域的 - { zh - cn: 頭等函數; zh - tw: 一級函式; } - ， 把對函數的引用綁定到閉包 （ closure ） 而不是函數指針 ， 這使得垃圾收集成爲必須 。