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

जे प्रोग्रामिंग भाषा, केनेथ ई. इवरसन और रोजर हुई द्वारा 1990 के दशक की शुरुआत में विकसित की गई, मुख्य रूप से एपीएल (प्रोग्रामिंग भाषा) (इवरसन द्वारा भी) पर आधारित एक सरणी प्रोग्रामिंग भाषा है।

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

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

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

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

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

हैलो, दुनिया! जे में कार्यक्रम है: <वाक्यविन्यास प्रकाश लैंग = जे> 'नमस्ते दुनिया!' 

हैलो वर्ल्ड का यह कार्यान्वयन जे के पारंपरिक उपयोग को दर्शाता है - कार्यक्रमों को जे दुभाषिया सत्र में दर्ज किया जाता है, और अभिव्यक्तियों के परिणाम प्रदर्शित किए जाते हैं। जे स्क्रिप्ट को स्टैंडअलोन प्रोग्राम के रूप में निष्पादित करने की व्यवस्था करना भी संभव है। यहां बताया गया है कि यह यूनिक्स सिस्टम पर कैसा दिख सकता है: <वाक्यविन्यास प्रकाश लैंग = जे> गूंज 'हैलो, दुनिया!' बाहर निकलना 
 * 1) !/बिन/जे.सी

(ध्यान दें कि वर्तमान जे कार्यान्वयन या तो स्थापित होते हैं  या (क्योंकि jconsole जावा द्वारा प्रयोग किया जाता है),   और संभवतः इसे/usr/bin या किसी अन्य निर्देशिका (शायद OSX पर एप्लिकेशन निर्देशिका) में स्थापित करें। इसलिए, यहां एक सिस्टम निर्भरता है जिसे उपयोगकर्ता को हल करना होगा।)

ऐतिहासिक रूप से, एपीएल का उपयोग किया   तह (उच्च-क्रम फ़ंक्शन) को इंगित करने के लिए, इसलिए   के बराबर था. इस बीच, विभाजन को गणितीय विभाजन चिह्न (÷).

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

नामित एक जे समारोह को परिभाषित करना  संख्याओं की सूची के औसत की गणना करने के लिए: avg=: +/ % #
 * सरणी के आइटम योग करता है।
 * सरणी में वस्तुओं की संख्या की गणना करता है।
 * योग को मदों की संख्या से विभाजित करता है।

यह फ़ंक्शन का परीक्षण निष्पादन है: avg 1 2 3 4 2.5

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

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

v=: ?. 20 $100 <अवधि शैली = रंग: ग्रे; >एनबी। एक यादृच्छिक वेक्टर 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 <अवधि शैली = रंग: ग्रे; >एनबी। आकार 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 <अवधि शैली = रंग: ग्रे; >एनबी। एक यादृच्छिक मैट्रिक्स m 46 5 29 2 4 39 10 7 10 44 46 28 13 18 1 42 28 10 40 12

avg"1 m <अवधि शैली = रंग: ग्रे; >एनबी। m की प्रत्येक रैंक 1 सबएरे (प्रत्येक पंक्ति) के लिए औसत लागू करें 17.2 22 21.2 26.4

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

जे डिक्शनरी पैदावार से क्विकॉर्ट लागू करना: <वाक्यविन्यास प्रकाश लैंग = जे> sel=: adverb def 'u # [' त्वरित प्रकार =: क्रिया परिभाषित करें यदि । 1>: #य करें। वाई अन्यथा। (क्विकसॉर्ट y sel e=.y{~?#y अंत। ) 

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

<वाक्यविन्यास प्रकाश लैंग = जे> Quicksort=: (($:@(<#[), (=#[), $:@(>#[)) ({~ ?@#)) ^: (1<#) 

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

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

<वाक्यविन्यास प्रकाश लैंग = जे> 1:`($:@-&2+$:@<:)@.(>&2) 

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

<वाक्यविन्यास प्रकाश लैंग = जे> fibonacci=:1:`(fibonacci@-&2+fibonacci@<:)@.(>&2) 

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

n=: 50 <अवधि शैली = रंग: ग्रे; >एनबी। n को आवश्यक अंकों की संख्या के रूप में सेट करें <.@o. 10x^n <अवधि शैली = रंग: ग्रे; >एनबी। विस्तारित सटीकता 10 से nवें * pi तक 314159265358979323846264338327950288419716939937510

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

<वाक्यविन्यास प्रकाश लैंग = जे> +/ 1 2 3 4 5 

का प्रभाव उत्पन्न करता है

<वाक्यविन्यास प्रकाश लैंग = जे> 1 + 2 + 3 + 4 + 5

+/ 1 2 3 4 5 15 

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

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


 * संख्यात्मक
 * शाब्दिक (चरित्र)
 * बॉक्सिंग

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

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

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

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) सम्मलित हैं। बिट्स की तरह, इन्हें सूचियों या मनमाने ढंग से आयाम वाले सरणियों में बनाया जा सकता है। बिट्स की तरह, ऐरे में सभी नंबरों पर ऑपरेशन किए जाते हैं।

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

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

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

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

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

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

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

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

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

दस्तावेज़ीकरण
J के दस्तावेज़ीकरण में शब्दकोश सम्मलित है, J में शब्दों की पहचान nouns, [http:/ /code.jsoftware.com/wiki/Vocabulary/Verbs verbs], modifiers, इत्यादि। प्राथमिक शब्द शब्दावली में सूचीबद्ध हैं, जिसमें उनके संबंधित भाषण के भाग हैं मार्कअप का उपयोग करके दिखाया गया। ध्यान दें कि क्रियाओं के दो रूप होते हैं: Arity (केवल दाहिनी ओर तर्क) और Arity (बाईं ओर और दाईं ओर तर्क)। उदाहरण के लिए, 'में 'हाइफ़न एक मठवासी क्रिया है, और' में 'हायफ़न एक युग्मक क्रिया है। मोनडिक परिभाषा ज्यादातर डायाडिक परिभाषा से स्वतंत्र है, भले ही क्रिया एक आदिम क्रिया है या एक व्युत्पन्न क्रिया है।

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

यह भी देखें

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

बाहरी संबंध

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