Q (Kx Systems से प्रोग्रामिंग भाषा)

Q ऐरे डेटा संरचना प्रसंस्करण के लिए एक प्रोग्रामिंग भाषा है, जिसे आर्थर व्हिटनी (कंप्यूटर वैज्ञानिक) द्वारा विकसित किया गया है। यह मालिकाना सॉफ्टवेयर है, जिसका व्यवसायीकरण Kx Systems द्वारा किया गया है। Q kdb+ के लिए क्वेरी भाषा के रूप में कार्य करता है, जो एक डिस्क आधारित और इन-मेमोरी डेटाबेस|इन-मेमोरी, कॉलम-ओरिएंटेड DBMS|कॉलम-आधारित डेटाबेस है। Kdb+ भाषा k (प्रोग्रामिंग भाषा) पर आधारित है, जो भाषा APL (प्रोग्रामिंग भाषा) का संक्षिप्त रूप है। Q, k के चारों ओर एक पतला आवरण है, जो अधिक पठनीय, अंग्रेजी जैसा इंटरफ़ेस प्रदान करता है। उपयोग के मामलों में से एक वित्तीय समय श्रृंखला विश्लेषण है, क्योंकि कोई सटीक समय मिलान नहीं कर सकता है। एक उदाहरण बोली और उससे पहले पूछे जाने वाले प्रश्न का मिलान करना है। दोनों टाइमस्टैम्प थोड़े अलग हैं और वैसे भी मेल खाते हैं।

अवलोकन
q के मूलभूत निर्माण खंड परमाणु, सूचियाँ और कार्य हैं। परमाणु अदिश (कंप्यूटिंग)  हैं और इसमें डेटा प्रकार संख्यात्मक, वर्ण, दिनांक और समय शामिल हैं। सूची (कंप्यूटिंग) परमाणुओं (या अन्य सूचियों) का क्रमबद्ध संग्रह है, जिस पर उच्च स्तरीय डेटा संरचनाएं सहयोगी सरणी और तालिका (डेटाबेस) आंतरिक रूप से निर्मित होती हैं। शब्दकोश मानों की सूची की कुंजियों की सूची का एक मानचित्र है। एक तालिका प्रतीक कुंजियों और मानों के रूप में समान लंबाई वाली सूचियों (स्तंभों) का एक ट्रांसपोज़्ड शब्दकोश है। एक कुंजीयुक्त तालिका, उस तालिका के समान होती है जिस पर एक अद्वितीय कुंजी रखी होती है, एक शब्दकोश है जहां कुंजी और मान दो तालिकाओं के रूप में व्यवस्थित होते हैं।

निम्नलिखित कोड डेटा संरचनाओं के संबंधों को प्रदर्शित करता है। मूल्यांकन करने के लिए अभिव्यक्तियाँ के साथ उपसर्ग दिखाई देती हैं  शीघ्र, नीचे दिखाए गए मूल्यांकन के आउटपुट के साथ:

इन संस्थाओं को फ़ंक्शंस के माध्यम से हेरफेर किया जाता है, जिसमें Q के साथ आने वाले अंतर्निहित फ़ंक्शंस (जिन्हें K (प्रोग्रामिंग भाषा) मैक्रोज़ के रूप में परिभाषित किया गया है) और उपयोगकर्ता-परिभाषित फ़ंक्शंस शामिल हैं। फ़ंक्शंस एक डेटा प्रकार हैं, और इन्हें सूचियों, शब्दकोशों और तालिकाओं में रखा जा सकता है, या पैरामीटर के रूप में अन्य फ़ंक्शंस में पास किया जा सकता है।

उदाहरण
K की तरह, Q की व्याख्या की जाती है और किसी अभिव्यक्ति के मूल्यांकन का परिणाम तुरंत प्रदर्शित किया जाता है, जब तक कि अर्ध-विराम के साथ समाप्त न किया जाए। हैलो वर्ल्ड  कार्यक्रम इस प्रकार तुच्छ है:

निम्नलिखित अभिव्यक्ति वेरिएबल x में संग्रहीत स्ट्रिंग्स की सूची को उनकी लंबाई के आधार पर क्रमबद्ध करती है:

अभिव्यक्ति का मूल्यांकन दाएं से बाएं इस प्रकार किया जाता है:


 * 1) प्रत्येक x की गणना करें, सूची x में प्रत्येक शब्द की लंबाई लौटाएं।
 * 2) idesc सूचकांक लौटाता है जो मानों की सूची को घटते क्रम में क्रमबद्ध करेगा।
 * 3) @ स्ट्रिंग्स की मूल सूची में अनुक्रमणिका के दाईं ओर पूर्णांक मानों का उपयोग करें।

फैक्टोरियल फ़ंक्शन को सीधे Q रूप में कार्यान्वित किया जा सकता है

या पुनरावर्ती रूप में

ध्यान दें कि दोनों ही मामलों में फ़ंक्शन अंतर्निहित रूप से x नामक एक एकल तर्क लेता है - सामान्य तौर पर x, y और z नामक तीन अंतर्निहित तर्कों का उपयोग करना संभव है, या स्थानीय चर बाइंडिंग को स्पष्ट रूप से तर्क देना संभव है।

प्रत्यक्ष कार्यान्वयन में, अभिव्यक्ति til x 0 से x-1 तक पूर्णांकों की गणना करता है, 1+ सूची के प्रत्येक तत्व में 1 जोड़ता है और prd सूची का उत्पाद लौटाता है।

पुनरावर्ती कार्यान्वयन में, सिंटैक्स $[condition; expr1; expr2] एक टर्नरी सशर्त है - यदि शर्त सत्य है तो expr1 वापस कर दिया जाता है; अन्यथा expr2 लौटा दिया जाता है। अभिव्यक्ति .z.s जावा में 'यह' या पायथन में 'स्वयं' के बराबर है - यह युक्त वस्तु का एक संदर्भ है, और q में फ़ंक्शन को स्वयं को कॉल करने में सक्षम बनाता है।

जब x 2 से बड़ा पूर्णांक है, तो निम्न फ़ंक्शन 1 लौटाएगा यदि यह अभाज्य है, अन्यथा 0: फ़ंक्शन का मूल्यांकन दाएं से बाएं ओर किया जाता है:


 * 1) x तक x से कम गैर-नकारात्मक पूर्णांकों की गणना करें।
 * 2) 2_ गणना के पहले दो तत्वों (0 और 1) को हटा देता है।
 * 3) x मॉड मूल पूर्णांक और काटी गई सूची में प्रत्येक मान के बीच मॉड्यूलो विभाजन करता है।
 * 4) न्यूनतम मॉड्यूलो परिणाम की सूची का न्यूनतम मान ज्ञात करें।

क्यू प्रोग्रामिंग भाषा में अपना स्वयं का टेबल क्वेरी सिंटैक्स होता है जिसे qSQL कहा जाता है, जो पारंपरिक एसक्यूएल जैसा दिखता है लेकिन इसमें महत्वपूर्ण अंतर हैं, मुख्य रूप से इस तथ्य के कारण कि अंतर्निहित टेबल पंक्ति के बजाय कॉलम द्वारा उन्मुख होते हैं।

बाहरी संबंध

 * , Kx Systems
 * , kdb+
 * Online documentation and developer site
 * Online kdb Tutorials
 * qStudio an IDE with timeseries charting for kdb
 * Kx Developer, an IDE for kdb+
 * kdb+ repositories on GitHub
 * Free online version of Q for Mortals
 * Q for All video tutorials
 * Technical Whitepapers
 * jq, an implementation of q on the JVM