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

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

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

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

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

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

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

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

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

हैलो वर्ल्ड

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

हैश /बिन/जे.सी

इको 'हैलो, वर्ल्ड '

एग्जिट

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

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

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

नामित जे समारोह को परिभाषित करना  संख्याओं की सूची के औसत की गणना करने के लिए: 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-बिट चौड़े ( एएससीआईआई ) होते हैं, लेकिन 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