데이터 유형 만 숫자 형 스칼라와 임의의 배열 배열 인 함수형 프로그래밍 언어를 상상해보십시오. 이 언어에는 무제한 반복 수단이 없으므로 다음은 허용되지 않습니다.
- 명시 적 루프 (어쨌든 부작용없이 많이 사용하지 않음)
- 재귀
- 임의의 일류 함수 (y-combinator 없음)
그러나이 언어에는 다음이 있습니다.
- 최상위 기능
- 어휘 범위가 지정된 let 바인딩
- 분기 제어 흐름
- 일반적인 스칼라 수학 및 논리 함수
- fill (n, x)와 같은 간단한 배열 생성자는 동일한 값 x로 n 요소 배열을 만듭니다.
- 가장 중요한 것은 병렬 구조화 된 반복 (예 : 맵, 축소, 스캔, 모든 쌍)을 수행하는 제한된 상위 연산자 세트입니다.
데이터 병렬 연산자에 대해보다 구체적으로 설명하려면 다음을 수행하십시오.
- y =지도 (f, x) => y [i] = f [i]
- 일부 순열에 대해 y = 감소 (f, a, x) => y = f (a, f (y [p [0]], f (y [p [1]], ...)))
- y = 스캔 (f, a, x) => y [i] = 감소 (f, a, y [0 ... i-1])
- y = allpairs (f, x, y) => y [i, j] = f (x [i], y [j])
우리는 다른 연산자도 가질 수 있지만, 다항식 실행 시간을 가져야하고, 합리적인 데이터 병렬 계산 모델 하에서 구현 가능해야하며, 대부분 다항식 공간에서 사용해야합니다.
이 언어로 표현할 수없는 구조는 다음과 같습니다.
while f(x) > tol:
x <- update(x)
이 시스템에서 무엇을 표현할 수 있습니까? FP의 검색 문제로만 제한됩니까? 모든 다항식 시간 알고리즘을 캡처 할 수 있습니까? 또한이 클래스에 대한 최소한의 연산자 세트가 있습니까?