एक कार्यात्मक प्रोग्रामिंग भाषा की कल्पना करें, जिसका एकमात्र डेटा प्रकार संख्यात्मक स्केल और सरणियों के मनमाने ढंग से घोंसले हैं। भाषा में अनबाउंड इटरेशन के किसी भी साधन का अभाव है, इसलिए निम्नलिखित अस्वीकृत हैं:
- स्पष्ट छोरों (साइड-इफेक्ट्स के बिना किसी भी तरह से अधिक उपयोग नहीं)
- प्रत्यावर्तन
- मनमाना प्रथम श्रेणी के कार्य (कोई वाई-कॉम्बिनेटर)
भाषा, हालांकि, है:
- शीर्ष स्तर के कार्य
- lexically scoped बाँधने देना
- शाखा नियंत्रण प्रवाह
- सामान्य स्केलर गणित और तर्क कार्य
- भरण (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]], ...))) कुछ क्रमपरिवर्तन p के लिए
- y = स्कैन (f, a, x) => y [i] = कम करना (f, a, y [० ... i-१)
- y = allpairs (f, x, y) => y [i, j] = f (x [i], y / j])
हमारे पास अन्य ऑपरेटर भी हो सकते हैं, लेकिन यह योग्य होने के लिए उनके पास बहुपद चल रहा होना चाहिए, डेटा समानांतर कम्प्यूटेशन के कुछ उचित मॉडल के तहत कार्यान्वयन योग्य होना चाहिए, और बहुपद स्थान पर उपयोग करना चाहिए।
स्पष्ट रूप से कुछ निर्माण हैं जिन्हें इस भाषा में व्यक्त नहीं किया जा सकता है, जैसे:
while f(x) > tol:
x <- update(x)
हम इस प्रणाली में क्या व्यक्त कर सकते हैं? क्या हम केवल एफपी में समस्याओं को खोजने के लिए सीमित हैं? क्या हम सभी बहुपद समय एल्गोरिदम पर कब्जा कर सकते हैं? इसके अलावा, क्या इस वर्ग के लिए ऑपरेटरों का कुछ न्यूनतम सेट है?