データ型のみが数値スカラーと配列の任意のネストである関数型プログラミング言語を想像してください。この言語には、無制限の反復の手段がないため、次のものは許可されません。
- 明示的なループ(副作用なしではあまり使用されません)
- 再帰
- 任意のファーストクラス関数(yコンビネーターなし)
ただし、言語には次のものがあります。
- トップレベル関数
- レキシカルスコープのletバインディング
- 分岐制御フロー
- 一般的なスカラー数学および論理関数
- fill(n、x)のようないくつかの単純な配列コンストラクターは、同じ値xを持つn要素の配列を作成します
- 最も重要なこと:並列構造化反復(map、reduce、scan、all-pairsなど)を実行する高次演算子の制限されたセット。
データ並列演算子をより具体的にするには:
- y = map(f、x)=> y [i] = f [i]
- y = reduce(f、a、x)=> y = f(a、f(y [p [0]]、f(y [p [1]]、...)))いくつかの順列p
- y = scan(f、a、x)=> y [i] = reduce(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の検索問題のみに制限されていますか?すべての多項式時間アルゴリズムをキャプチャできますか?また、このクラスには最小限の演算子セットがありますか?