頭等函數
維基百科,自由的 encyclopedia
一級函式(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]這使得垃圾收集成為必須。