일급 함수

컴퓨터 과학에서 프로그래밍 언어는 함수를 일급 객체로 취급하는 경우 일급 함수(first-class function)를 갖는다고 한다. 이는 언어가 함수를 다른 함수에 대한 인수로 전달하고, 이를 다른 함수의 값으로 반환하고, 변수에 할당하거나 자료 구조에 저장하는 것을 지원한다는 것을 의미한다. 일부 프로그래밍 언어 이론가들은 익명 함수(함수 리터럴)에 대한 지원도 요구한다.Programming language pragmatics, by Michael Lee Scott, section 11.2 "Functional Programming". 일급 함수를 사용하는 언어에서는 함수 이름에 특별한 상태가 없다. 이는 함수 유형의 일반 변수처럼 취급된다. 이 용어는 1960년대 중반 크리스토퍼 스트래치가 "일급 객체로서의 기능"이라는 맥락에서 만들어졌다. (also  on 2010-02-16

일급 함수는 고차 함수의 사용이 표준 관행인 함수형 프로그래밍 스타일에 필수적이다. 고차 함수의 간단한 예는 함수와 목록을 인수로 사용하고 목록의 각 구성원에 함수를 적용하여 형성된 목록을 반환하는 map 함수이다. 언어가 맵을 지원하려면 함수를 인수로 전달하는 것을 지원해야 한다.

함수를 인수로 전달하거나 결과로 반환하는 데는 특정 구현상의 어려움이 있다. 특히 중첩 및 익명 함수에 도입된 비지역 변수가 있는 경우에는 더욱 그렇다. 역사적으로 이러한 문제는 "함수 인수"에서 유래한 이름인 funarg 문제라고 불렸다.Joel Moses. "The Function of FUNCTION in LISP, or Why the FUNARG Problem Should be Called the Environment Problem". MIT AI Memo 199, 1970. 초기 명령형 언어에서는 함수를 결과 유형(예: 알골 60, 파스칼)으로 지원하지 않거나 중첩 함수 및 비지역 변수(예: C)를 생략하여 이러한 문제를 방지했다. 초기 함수형 언어 리스프는 동적 범위 지정의 접근 방식을 취했다. 여기서 비지역 변수는 함수가 정의된 위치 대신 함수가 실행되는 지점에서 해당 변수의 가장 가까운 정의를 참조한다. 어휘 범위가 지정된 일급 함수에 대한 적절한 지원이 스킴에 도입되었으며 함수에 대한 참조를 기본 함수 포인터 대신 클로저로 처리해야 하므로 쓰레기 수집이 필요하다.

 같이 보기 
 eval

 각주 

 출처 
 Leonidas Fegaras. "Functional Languages and Higher-Order Functions". CSE5317/CSE4305: Design and Construction of Compilers. University of Texas at Arlington.

 외부 링크 
 First-class functions on Rosetta Code.
 Higher order functions  at IBM developerWorks

분류:컴파일러 구성
분류:자료형
분류:함수형 프로그래밍
분류:원시 자료형
분류:프로그래밍 언어 이론
분류:함수 (프로그래밍)