FP(프로그래밍 언어)

FP (programming language)
FP
패러다임함수 수준
설계자존 백커스
첫 등장1977
방언
FP84
영향을 받은
APL[1]
영향받은
FL, 하스켈

FP(기능 프로그래밍의 줄임말)[2]는 존 백커스[2] 기능 수준 프로그래밍 패러다임을 지원하기 위해 만든 프로그래밍 언어다.일반적으로 유용한 원시 요소 집합에서 프로그램을 구축하고 명명된 변수(암묵적 프로그래밍 또는 "점 자유"라고도 하는 스타일)를 피할 수 있다.그것은 케네스 E가 개발한 APL의 영향을 많이 받았다. 1960년대 초 아이버슨.[3]

FP 언어는 1977년 백커스의 튜링상 논문 '프로그래밍이 폰 노이만 스타일에서 해방될 수 있을까'에서 '기능적 스타일과 프로그램 대수학'이라는 부제를 달고 소개됐다.이 논문은 기능 프로그래밍 연구에 대한 관심을 불러일으켰고,[4] 결국 백커스가 바라던 기능 수준 패러다임이 아닌 람다 미적분 패러다임에 주로 기반을 둔 현대 기능언어로 이어졌다.백커스는 튜링상 논문에서 FP 스타일이 어떻게 다른지 다음과 같이 설명했다.

FP 시스템은 기능적 형태라고 불리는 결합 형태의 고정된 집합의 사용에 기초한다.이것들, 그리고 단순한 정의들은 현존하는 것들로부터 새로운 기능을 구축하는 유일한 수단이다; 그들은 변수나 대체 규칙을 사용하지 않고, 그것들은 프로그램의 관련 대수학의 운영이 된다.FP 시스템의 모든 기능은 한 가지 유형이다. FP 시스템은 객체에 객체를 매핑하고 항상 단일 인수를 취한다.[2]

FP 자체는 학계 밖에서는 별로 쓸모가 없었다.[5]1980년대에 백커스는 IBM 리서치의 내부 프로젝트였던 FL이라는 후계 언어를 만들었다.

개요

FP 프로그램이 서로 매핑하는 시퀀스 형성에 따라 닫히는 집합을 구성한다.

x1,...,xn 이라면, 순서x1,...,xn〉도 이다.

이 값들은 모든 원자 집합에서 만들어질 수 있다: 술탄, 정수, 실재, 문자 등:

부울 : {T, F} 정수 : {0,1,2,...,,} 문자 : {'a',b'',c',...{} 기호: {x, y,...}

정의되지 않은 값, 즉 밑바닥이다.시퀀스는 최하위 보존 상태:

x1n, ..., ,, ..., ...〉 = ⊥

FP 프로그램은 각 프로그램이 단일 값 x를 다른 으로 매핑하는 기능이다.

f:x함수 f를 값 x에 적용함으로써 발생하는 을 나타낸다.

함수는 원시(즉, FP 환경과 함께 제공)이거나 프로그램 형성 작업(기능이라고도 함)에 의해 원시 요소로부터 구축된다.

원시 함수의 예는 일정하며, 이는 값 x를 상수값 함수 x̄로 변환한다.기능이 엄격함:

f: = 

원시 함수의 또 다른 예는 선택기 함수 패밀리로, 1,2로 표시된다... 여기서:

ii: 〈x1, ...,xn 〉 = 1 n i ≤ n = 다른 ⊥

함수

원시적 기능과 대조적으로 기능성은 다른 기능에서 작동한다.예를 들어, 어떤 함수는 0을 더하는 경우와 1을 곱하는 것과 같은 단위 값을 가지고 있다.기능 단위는 다음 값을 갖는 기능 f에 적용할 때 그러한 을 생성한다.

단위 + = 0 단위 × = 1 단위 foo = ⊥

FP의 핵심 기능은 다음과 같다.

합성 fg, 여기서 fgg:x = f:(g:x)
[f1,...,fn] 여기서 [f1,...,fn]:x = 〈f1:x, ...,fn:x〉.
조건(hf;g) 여기서 (hf;g):x = f:x(h:x = T = g:x, h:x = F = ⊥) 다른 경우
αf: αf1, 여기서 αfn: 〈x, ...,x〉 = 〈f:x1, ...,f:xn〉.
insert-right /f 여기서 /f:x〉 = x와 /fn: 〈x1,x2, ...〉 = f: 〈x12,/f:〉, /f: 〈xn〉 = unit f.
삽입-왼쪽 \f 여기서 \f:x〉 = x와 \f: 〈x12,xn, ...〉 = f: 〈\f1:〉, 〈xn-1〉, 〈xn〉, \f: \x〉 = \f: 〈x〉 = unit f.

등함수

함수에 의해 원시적인 양으로부터 구성되는 것 외에, 함수는 방정식에 의해 반복적으로 정의될 수 있는데, 가장 단순한 종류는 다음과 같다.

에프 에프

여기서 Ef는 원시성, 다른 정의된 함수, 함수 기호 f 자체에서 생성된 표현으로, 함수들을 사용한다.

FP84

FP84무한 시퀀스, 프로그래머 정의 결합 양식(백커스 자신이 FP의 후계자인 FL에 추가한 것과 유사한 형태), 게으른 평가를 포함하도록 FP를 확장한 것이다.FP에서 Backus의 또 다른 변주곡 중 하나인 FFP와 달리 FP84는 물체와 기능을 명확히 구분한다. 즉, 후자는 더 이상 전자의 순서에 의해 표현되지 않는다.FP84의 연장은 시퀀스 구성이 비순서 객체에만 적용되는 FP 제한을 제거함으로써 이루어진다. FP84에서는 시퀀스 구성 시 전체 표현 공간(의미 ⊥)이 닫힌다.

FP84의 의미론들은 프로그램에 대한 조작과 추론에 사용될 수 있는 기능 수준 평등의 집합인 프로그램의 기초 대수학으로 구체화되었다.

참조

  1. ^ Wayback Machine Paul Hudak, 1989년에 보관된 2016-03-11 기능 프로그래밍 언어의 개념, 진화적용
  2. ^ a b c Backus, J. (1978). "Can programming be liberated from the von Neumann style?: A functional style and its algebra of programs". Communications of the ACM. 21 (8): 613. doi:10.1145/359576.359579.
  3. ^ "Association for Computing Machinery A. M. Turing Award" (PDF).
  4. ^ Yang, Jean (2017). "Interview with Simon Peyton-Jones". People of Programming Languages.
  5. ^ Hague, James (December 28, 2007). "Functional Programming Archaeology". Programming in the Twenty-First Century.
  • 편의성을 위해 단순성을 희생: 너는 어디에 선을 긋니? 존 H. 윌리엄스와 에드워드 L.Wimmers, IBM Almaden Research Center, 1988년 1월, 샌디에이고, 프로그래밍 언어의 원리에 관한 FIF16 연례 ACM SIGACT-SIG플랜 심포지엄의 진행.

외부 링크