जे (प्रोग्रामिंग भाषा)

1990 के आरम्भ में केनेथ ई. इवेर्सन एंड रॉजर हुई द्वारा विकसित जे प्रोग्रामिंग भाषा के रूप थी,[5][6] सरणी प्रोग्रामिंग भाषा, जो मुख्य रूप से एपीएल प्रोग्रामिंग भाषा आईवेर्सन पर आधारित है।

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

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

जॉन बैकस की लैंग्वेज एफपी और एफएल प्रोग्रामिंग भाषा की तरह, जे अपने कार्यात्मक स्तर के प्रोग्रामिंग फीचर्स के माध्यम से फंक्शन-लेवल प्रोग्रामिंग को सपोर्ट करता है।

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

मार्च 2011 से जीएनयू जनरल पब्लिक लाइसेंस संस्करण 3 जी एल वी 3 के अनुसार स्वतंत्र और ओपन सोर्स सॉफ्टवेयर के रूप में होते है।

उदाहरण
J, पॉइंट फ्री स्टाइल और फंक्शन कंपोज़िशन की अनुमति देता है। इस प्रकार इसके प्रोग्राम बहुत संक्षिप्त हो जाते हैं और कुछ प्रोग्रामरों द्वारा इसे पढ़ना मुश्किल माना जाता है।

हैलो वर्ल्ड जे में कार्यक्रम है:

'Hello, World!'

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


 * 1) !/bin/jc

echo 'Hello, world!'

exit

ध्यान दें कि वर्तमान j कार्यान्वयन या तो जे कंसोल स्थापित करता है या जे कंसोल का उपयोग जावा आई जे कंसोल द्वारा किया जाता है और अधिकांशतः: इसे यूएसआर/बिन या किसी अन्य ओएसएक्स अनुप्रयोग निर्देशिका में स्थापित किया जाता है, इसलिए, यहां प्रणाली निर्भरता होती है और उपयोगकर्ता को हल करना होता है।

ऐतिहासिक रूप से एपल ने गुना इंगित करने के लिए के बराबर था. इस बीच, विभाजन का प्रतिनिधित्व गणितीय विभाजन चिन्ह (÷) के द्वारा किया जाता है।

क्योंकि एएससी आईआई में विभाजन प्रतीक प्रति के रूप में सम्मलित नहीं है, जे दृश्य सन्निकटन या अनुस्मारक के रूप में विभाजन का प्रतिनिधित्व करने के लिए% का उपयोग करता है। यह जे के टोकन के स्मरक करैक्टर के बारे में कुछ दिखाता है और एएससीआईआई के उपयोग से लगाए गए कुछ प्रश्नों को दर्शाता है।

संख्याओं की सूची के औसत की गणना करने के लिए एवीजी नाम के एक J फ़ंक्शन को परिभाषित करने के लिए उपयोग होता है

avg=: +/ % #
 * सरणी की संख्या का योग करती है।
 * सरणी में वस्तुओं की संख्या की गणना करती है।
 * वस्तुओं की संख्या से विभाजित करता है।

यह फ़ंक्शन का परीक्षण निष्पादन है।

avg 1 2 3 4

2.5

ऊपर, औसत को तीन क्रियाओं की ट्रेन का उपयोग करके परिभाषित किया गया है (, , और  ) विशेष रूप से विभाजित होता है,  वैसा ही जैसा कि   जो J की कुछ शक्ति को दर्शाता है। यहाँ V0, V1, और V2 क्रियाओं को दर्शाता है और Ny संज्ञा को दर्शाता है।

उपयोग करने के कुछ उदाहरण :

v=: ?. 20 $100 NB. a random vector

v

46 55 79 52 54 39 60 57 60 94 46 78 13 18 51 92 78 60 90 62

avg v

59.2

4 avg\ v NB. moving average on periods of size 4 58 60 56 51.25 52.5 54 67.75 64.25 69.5 57.75 38.75 40 43.5 59.75 70.25 80 72.5

m=: ?. 4 5 $50 NB. a random matrix

m

46 5 29 2 4 39 10 7 10 44 46 28 13 18 1 42 28 10 40 12

avg"1 m NB. apply avg to each rank 1 subarray (each row) of m 17.2 22 21.2 26.4

जे में रैंक एक महत्वपूर्ण अवधारणा के रूप में होता है। जे में इसका महत्व एसक्यूएल में चयन के महत्व के समान है और सी प्रोग्रामिंग भाषा में है।

जे डिक्शनरी पैदावार से क्विकॉर्ट को लागू करता है।

sel=: adverb def 'u # ['

quicksort=: verb define if. 1 >: #y do. y else. (quicksort y sel e=.y{~?#y end. )

निम्नलिखित टैसिट प्रोग्रामिंग को प्रदर्शित करने वाले क्विकसॉर्ट का कार्यान्वयन के रूप में होता है। उत्तरार्द्ध में एक साथ कार्यों की रचना करना और स्पष्ट रूप से किसी भी चर का उल्लेख नहीं करना सम्मलित है। कांटे और हुक के लिए J का समर्थन नियमों को निर्धारित करता है कि इस फ़ंक्शन पर लागू होने वाले कारण,को इसके घटक फ़ंक्शंस पर कैसे लागू किया जाता है। Quicksort=: (($:@(<#[), (=#[), $:@(>#[)) ({~ ?@#)) ^: (1<#)

जे में छंटनी सामान्यतः अंतर्निहित (प्राचीन ) क्रियाओं का उपयोग करके पूरी की जाती है  (क्रमबद्ध करें) और   (क्रमबद्ध करें)। उपरोक्त उपयोक्ता-परिभाषित प्रकार, जैसे त्वरित प्रकार, सामान्यतः केवल चित्रण के लिए हैं।

जे में सॉर्टिंग सामान्यतः अंतर्निहित (आदिम) क्रियाओं /: (सॉर्ट अप) और \: (सॉर्ट डाउन) का उपयोग करके पूरा किया जाता है। उपरोक्त उपयोक्ता परिभाषित प्रकार, जैसे त्वरित प्रकार, सामान्यतः केवल चित्रण के लिएउपयोग होता है।

निम्न उदाहरण संदर्भ क्रिया के उपयोग को पुनरावर्ती रूप से फाइबोनैचि संख्याओं की गणना करने के लिए प्रदर्शित करता है।

1:`($:@-&2+$:@<:)@.(>&2)

यह पुनरावर्तन क्रिया को नाम से संदर्भित करके भी पूरा किया जा सकता है, चूंकि यह निश्चित रूप से तभी संभव है जब क्रिया का नाम दिया गया हो

फाइबोनैचि =:1:`(फाइबोनैचि @-&2+फाइबोनैचि @<:)@.(>&2)

निम्नलिखित व्यंजक पाई को n अंकों के साथ प्रदर्शित करता है और J की विस्तारित सटीक क्षमताओं को प्रदर्शित करता है:

एनबी ने आवश्यक अंकों की संख्या के रूप में एन समूह किया

एनबी ने सटीकता 10 को nवें * p तक बढ़ाया जाता है 314159265358979323846264338327950288419716939937510

क्रिया और संशोधक
एक प्रोग्राम या रूटीन जो डेटा को इनपुट के रूप में लेता है और डेटा को आउटपुट के रूप में उत्पन्न करता है, जो एक क्रिया कहलाता है। जे के पास पूर्वनिर्धारित क्रियाओं का एक समृद्ध समूह होता है, जो सभी स्वचालित रूप से एकाधिक डेटा प्रकारों पर काम करते हैं उदाहरण के लिए क्रिया i मिलान प्रणाली के लिए किसी भी आकार की सरणियों में खोज करता है।

3 1 4 1 5 9 मैं। 3 1 एनबी 3 और 1 की पहली घटना का सूचकांक खोजें 0 1 3 1 4 1 5 9 मैं: 3 1 एनबी 3 और 1 की अंतिम घटना का सूचकांक ज्ञात करें 0 3

उपयोक्ता प्रोग्रामों को नामित किया जा सकता है और जहां कहीं प्राचीन की अनुमति होती है वहां उनका उपयोग किया जा सकता है।

J की शक्ति पर्याप्त हद तक इसके संशोधक से आती है: प्रतीक जो संज्ञा 'और क्रिया' को ऑपरेंड के रूप में लेते हैं और ऑपरेंड को निर्दिष्ट विधि से लागू करते हैं। उदाहरण के लिए, संशोधक / ऑपरेंड, क्रिया को उसके बाईं ओर ले जाता है, और क्रिया उत्पन्न करता है जो उस क्रिया को उसके तर्क के प्रत्येक आइटम के बीच लागू करता है। वह है, +/ क्रिया है, जिसे 'लागू करें' के रूप में परिभाषित किया गया है + आपके तर्क की वस्तुओं के बीच' इस प्रकार, वाक्य

J की शक्ति पर्याप्त सीमा तक इसके संशोधक प्रतीकों से आती है जो संज्ञा और क्रिया को ऑपरेंड के रूप में लेते हैं और ऑपरेंड को एक निर्दिष्ट विधि से लागू करते हैं। उदाहरण के लिए, संशोधक ऑपरेंड क्रिया को उसके बाईं ओर ले जाता है और एक क्रिया उत्पन्न करता है जो उस क्रिया को उसके प्रयोजन के प्रत्येक आइटम के बीच लागू करता है। यह +/ एक क्रिया है जिसे 'लागू, + आपके तर्क की वस्तुओं के बीच' के रूप में परिभाषित किया गया है।

+/ 1 2 3 4 5

का प्रभाव उत्पन्न करता है 1 + 2 + 3 + 4 + 5

+/ 1 2 3 4 5 15

J के पास इनमें से लगभग दो दर्जन संशोधक हैं। वे सभी किसी भी क्रिया पर लागू हो सकते हैं, यहाँ तक कि एक उपयोगकर्ता लिखित क्रिया पर भी और उपयोगकर्ता अपने स्वयं के संशोधक लिख सकते हैं। जबकि संशोधक व्यक्तिगत रूप से अनुमति देने वाले शक्तिशाली होते हैं। कुछ संशोधक उस क्रम को नियंत्रित करते हैं जिसमें घटकों को निष्पादित किया जाता है, संशोधक को व्यावहारिक प्रोग्रामिंग के लिए आवश्यक असीमित विविधता के संचालन के लिए किसी भी क्रम में संयोजित करने की अनुमति देता है।
 * बार-बार निष्पादन, उदाहरण डु व्हाइल लूप
 * सशर्त निष्पादन, उदाहरण इफ
 * तर्कों के नियमित या अनियमित सबसेट का निष्पादन होता है।

डेटा प्रकार और संरचनाएं
J तीन सरल प्रकारों का समर्थन करता है


 * संख्यात्मक
 * शाब्दिक (करैक्टर )
 * बॉक्स्ड

इनमें से न्यूमेरिक के सबसे ज्यादा वैरिएंट होते है।

J का एक सांख्यिक प्रकार बिट होती है। दो बिट का मान हैं 0 और 1 बिट्स को सूचियों में बनाया जाता है। उदाहरण के लिए, 1 0 1 0 1 1 0 0 आठ बिट्स की एक सूची के रूप में होती है । वाक्यात्मक रूप से जे पार्सर इसे एक शब्द के रूप में मानता है। रिक्त विशेष्ता को शब्द बनाने वाले करैक्टर के रूप में पहचाना जाता है जो अन्य संख्यात्मक शब्द होते है। यादृच्छिक लंबाई की सूची समर्थित होते है।

इसके अतिरिक्त, जे इन सूचियों पर सभी सामान्य बाइनरी ऑपरेशंस का समर्थन करता है, उदाहरण के लिए, जैसे कि एक्सक्लूसिव या रोटेट शिफ्ट नॉट आदि

1 0 0 1 0 0 1 0 +। 0 1 0 1 1 0 1 0 NB. या 1 1 0 1 1 0 1 0

3 |. 1 0 1 1 0 0 1 1 1 1 1 NB. घुमाएँ 1 0 0 1 1 1 1 1 1 1 0 1

जे बिट्स के उच्च क्रम सरणियों का भी समर्थन करता है। उन्हें द्वि-आयामी, त्रि-आयामी, आदि सरणियों में बनाया जा सकता है। उपरोक्त ऑपरेशन इन सरणियों पर समान रूप से अच्छा प्रदर्शन करते हैं।

अन्य संख्यात्मक प्रकारों में पूर्णांक सम्मलित हैं, उदाहरण 3 42 फ्लोटिंग पॉइंट 3.14, 8.8e22, जटिल 0j1, 2.5j3e88, विस्तारित सटीक पूर्णांक 12345678901234567890x और विस्तारित सटीक तर्कसंगत अंश (1r2, 3r4)। बिट्स के साथ इन्हें सूचियों या यादृच्छिक ढंग से आयामित सरणियों में बनाया जा सकता है। बिट्स की तरह, ऐरे में सभी नंबरों पर ऑपरेशन किए जाते हैं।

बिट्स की सूची को का उपयोग करके पूर्णांक में परिवर्तित किया जा सकता है  क्रिया का उपयोग करके पूर्णांकों को बिट्स की सूचियों में परिवर्तित किया जा सकता है  क्रिया जे को पार्स करते समय, J अवधि और कोलन शब्द बनाने वाले अक्षर के रूप में होते है। वे कभी भी अकेले टोकन नहीं होते हैं, जब तक कि सफेद स्थान वर्ण नहीं होते हैं।

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

अंत में, एक बॉक्सिंग डेटा प्रकार होता है। सामान्यतः डेटा को < ऑपरेशन का उपयोग करके बिना किसी तर्क के एक बॉक्स में रखा जाता है, यदि कोई बाएं कारण है तो यह संक्रिया से कम होता है। यह C & ऑपरेशन के अनुरूप है जिसमें कोई बायाँ तर्क नहीं है। चूंकि, जहाँ C & के परिणाम में संदर्भ शब्दार्थ के रूप में है, J के < के परिणाम में मूल्य शब्दार्थ है। दूसरे शब्दों में < एक फलन है और यह एक परिणाम उत्पन्न करता है। निहित डेटा की संरचना पर ध्यान दिए बिना परिणाम में 0 आयाम के रूप में होते है। जे प्रोग्रामर के दृष्टिकोण से < डेटा को एक बॉक्स में रखता है और बॉक्स की एक सरणी के साथ काम करने की अनुमति देता है जिसे अन्य बॉक्स के साथ इकट्ठा किया जाता है और/या अधिक प्रतियां बॉक्स से बनाई जा सकती हैं।

<1 0 0 1 0 +-+ |1 0 0 1 0|  +-+

जे द्वारा प्रस्तावित एकमात्र संग्रह प्रकार यादृच्छिक ढंग से आयामी सरणी के रूप में होता है। इन सरणियों पर संचालन का उपयोग करके अधिकांश कलन विधि को बहुत ही संक्षिप्त रूप से व्यक्त किया जा सकता है।

जे के सरणी सजातीय रूप से टाइप किए गए हैं, उदाहरण के लिए सूची  के होने पर पूर्णांकों की सूची   है। अधिकांश भाग के लिए, इस प्रकार के विषय प्रोग्रामर के लिए पारदर्शी होते हैं। केवल कुछ विशिष्ट ऑपरेशन ही प्रकार में अंतर प्रकट करते हैं। उदाहरण के लिए, सूची   सूची के रूप में, अधिकांश परिचालनों द्वारा बिल्कुल वही व्यवहार किया जाएगा.

जे भी विरल संख्यात्मक सरणियों का समर्थन करता है जहां गैर-शून्य मान उनके सूचकांकों के साथ संग्रहीत होते हैं। यह कुशल तंत्र है जहां अपेक्षाकृत कुछ मान गैर-शून्य होते हैं।

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

एक अन्य छद्म प्रकार-मान के अतिरिक्त नाम से जुड़ा हुआ है-मेमोरी मैप की गई फ़ाइल के रूप में होती है ।

डिबगिंग
जे में त्रुटि पर या क्रियाओं के भीतर निर्दिष्ट स्थानों पर रुकने की सामान्य सुविधा होती है। इसमें अद्वितीय विज़ुअल डीबगर भी होते है, जिसे Dissect कहा जाता है, जो J वाक्य के निष्पादन का 2-डी इंटरैक्टिव डिस्प्ले देता है। चूँकि J का वाक्य निचले स्तर की भाषाओं में पूरे उप नेम के रूप में अधिक संगणना करता है, जो दृश्य प्रदर्शन पर्याप्त मददगार होता है।

दस्तावेज़ीकरण
J के दस्तावेज़ीकरण में J शब्दों के साथ एक शब्दकोश सम्मलित होता है। जिसे संज्ञा, क्रिया संशोधक आदि के रूप में पहचाना जाता है। प्राथमिक शब्दों को शब्दावली में सूचीबद्ध किया गया है जिसमें मार्कअप का उपयोग करके उनके भाषण के संबंधित भागों को इंगित किया गया है। ध्यान दें कि क्रियाओं के दो रूप होते हैं केवल दाहिनी ओर मोनडिक तर्क और बाईं ओर और दाईं ओर द्वैत तर्क के रूप में होते है। उदाहरण के लिए, -1 में हाइफ़न एक मोनाडिक क्रिया होती है और '3-2' में हाइफ़न डाइएडिक क्रिया के रूप में होती है। मोनैडिक परिभाषा ज्यादातर डायाडिक परिभाषा से स्वतंत्र है, भले ही क्रिया एक प्राचीन है या एक व्युत्पन्न क्रिया है।

नियंत्रण संरचनाएं
जे अन्य प्रक्रियात्मक भाषाओं के समान नियंत्रण संरचनाएं प्रदान करता है (विवरण यहां)। प्रमुख नियंत्रण शब्द प्रत्येक श्रेणी में सम्मलित हैं:

यह भी देखें

 * के (प्रोग्रामिंग भाषा) - अन्य एपीएल-प्रभावित भाषा के रूप में होती है
 * क्यू (केएक्स सिस्टम्स से प्रोग्रामिंग भाषा) - केडीबी + की भाषा और के और केएसक्यूएल का नया संस्करण मिलाया गया है।

बाहरी संबंध

 * – JSoftware, creators of J
 * – Repository of source
 * J Wiki
 * Learning J – An Introduction to the J Programming Language by Roger Stokes