एक-पंक्ति कार्यक्रम

From alpha
Jump to navigation Jump to search

कंप्यूटर प्रोग्रामिंग में, एक-लाइनर प्रोग्राम मूल रूप से एक ऑपरेटिंग सिस्टम शैल (कंप्यूटिंग) की कमांड लाइन के लिए टेक्स्टुअल इनपुट था जो इनपुट की सिर्फ एक लाइन में कुछ कार्य करता था। आज के समय में, एक-लाइनर हो सकता है

स्क्रिप्टिंग भाषा के लिए कुछ गतिशील प्रोग्रामिंग भाषा, जैसे AWK प्रोग्रामिंग भाषा, सेड (प्रोग्रामिंग भाषा), और पर्ल, पारंपरिक रूप से वन-लाइनर्स को व्यक्त करने में माहिर हैं। यूनिक्स शैल या विंडोज़ पॉवरशेल जैसे शेल दुभाषिए शक्तिशाली वन-लाइनर्स के निर्माण की अनुमति देते हैं।

वन-लाइनर वाक्यांश का उपयोग किसी भी भाषा के लिए प्रोग्राम-स्रोत को शामिल करने के लिए बढ़ाया गया है जो एक पंक्ति में कुछ उपयोगी करता है।

इतिहास

वन-लाइनर प्रोग्राम की अवधारणा 1960 के दशक से ज्ञात है[1] एपीएल (प्रोग्रामिंग भाषा) प्रोग्रामिंग भाषा की रिलीज के साथ। अपने संक्षिप्त वाक्यविन्यास और शक्तिशाली गणितीय ऑपरेटरों के साथ, एपीएल ने उपयोगी कार्यक्रमों को कुछ प्रतीकों में प्रस्तुत करने की अनुमति दी।

1970 के दशक में, वन-लाइनर घरेलू कंप्यूटर और बुनियादी के उदय के साथ जुड़े। कंप्यूटर पत्रिकाओं ने बेसिक की कई बोलियों में टाइप-इन कार्यक्रम प्रकाशित किए। कुछ पत्रिकाओं ने नियमित कॉलम केवल प्रभावशाली लघु और एक-पंक्ति कार्यक्रमों के लिए समर्पित किए।[2] वन-लाइनर शब्द के द एडब्ल्यूके प्रोग्रामिंग लैंग्वेज पुस्तक के सूचकांक में भी दो संदर्भ हैं (पुस्तक को अक्सर संक्षिप्त नाम टीएपीएल द्वारा संदर्भित किया जाता है)। यह प्रोग्रामिंग भाषा AWK प्रोग्रामिंग भाषा की व्याख्या करता है, जो यूनिक्स ऑपरेटिंग सिस्टम का हिस्सा है। लेखक प्रारंभिक यूनिक्स मशीनों पर अपने दैनिक कार्य से वन-लाइनर प्रतिमान के जन्म की व्याख्या करते हैं:

The 1977 version had only a few built-in variables and predefined functions. It was designed for writing short programs […] Our model was that an invocation would be one or two lines long, typed in and used immediately. Defaults were chosen to match this style […] We, being the authors, knew how the language was supposed to be used, and so we only wrote one-liners.

ध्यान दें कि वन-लाइनर की यह मूल परिभाषा बिना किसी संकलन के कार्यक्रम के तत्काल निष्पादन का तात्पर्य है। इसलिए, एक सख्त अर्थ में, व्याख्या की गई भाषाओं के लिए केवल स्रोत कोड ही वन-लाइनर के रूप में योग्य है। लेकिन वन-लाइनर की इस सख्त समझ को 1985 में व्यापक किया गया जब IOCCC ने C (प्रोग्रामिंग भाषा) के लिए सर्वश्रेष्ठ वन लाइनर की श्रेणी पेश की, जो एक संकलित भाषा है।

उदाहरण

प्रोग्रामिंग भाषाओं की विभेदक अभिव्यंजक शक्ति को दिखाने के लिए वन-लाइनर्स का भी उपयोग किया जाता है। अक्सर, प्रोग्रामिंग क्षमता प्रदर्शित करने के लिए वन-लाइनर्स का उपयोग किया जाता है। यह देखने के लिए अक्सर प्रतियोगिताएं आयोजित की जाती हैं कि कौन सबसे असाधारण वन-लाइनर बना सकता है।

बुनियादी

कमोडोर 64 के लिए 10प्रिंट वन-लाइनर बेसिक प्रोग्राम का सिम्युलेटेड आउटपुट

बेसिक की एक पंक्ति में आम तौर पर 255 अक्षर तक हो सकते हैं, और एक लाइनर साधारण गेम से लेकर होते हैं[3] ग्राफिकल डेमो के लिए. अधिक प्रसिद्ध डेमो वन-लाइनर्स में से एक को बोलचाल की भाषा में 10PRINT के रूप में जाना जाता है, जो कमोडोर 64 के लिए लिखा गया है:

10 PRINT CHR$(205.5+RND(1)); : GOTO 10


सी

निम्नलिखित उदाहरण एक सी (प्रोग्रामिंग भाषा) प्रोग्राम है (आईओसीसीसी की सर्वश्रेष्ठ वन-लाइनर श्रेणी में एक विजेता प्रविष्टि)।

main(int c,char**v){return!m(v[1],v[2]);}m(char*s,char*t){return*t-42?*s?63==*t|*s==*t&&m(s+1,t+1):!*t:m(s,t+1)||*s&&m(s+1,t);}

यह वन-लाइनर प्रोग्राम एक ग्लोब पैटर्न मैचर है। यह ग्लोब वर्णों `*' को समझता है जिसका अर्थ है `शून्य या अधिक वर्ण' और `?' अधिकांश यूनिक्स शैलों की तरह बिल्कुल एक वर्ण का अर्थ।

इसे दो आर्ग, स्ट्रिंग और ग्लोब पैटर्न के साथ चलाएँ। जब पैटर्न मेल खाता है तो निकास स्थिति 0 (शेल सत्य) होती है, अन्यथा 1। ग्लोब पैटर्न को पूरी स्ट्रिंग से मेल खाना चाहिए, इसलिए यदि आप बीच में कुछ ढूंढ रहे हैं तो आप पैटर्न की शुरुआत और अंत में * का उपयोग करना चाह सकते हैं। उदाहरण:

$ ./a.out foo 'f??'; echo $?
$ ./a.out 'best short program' '??st*o**p?*'; echo $?


AWK

टीएपीएल पुस्तक में पुस्तक के पहले अध्याय के अंत में एक-पंक्ति के 20 उदाहरण हैं।

यहाँ उनमें से सबसे पहले हैं:

  1. इनपुट लाइनों की कुल संख्या प्रिंट करें (जैसे wc (यूनिक्स)|wc -l):
    END { print NR }
    
  2. दसवीं इनपुट लाइन प्रिंट करें:
    NR == 10
    
  3. प्रत्येक इनपुट लाइन के अंतिम फ़ील्ड को प्रिंट करें:
    { print $NF }
    


जे

यहां J (प्रोग्रामिंग भाषा) में उदाहरण दिए गए हैं:

  • संख्याओं की सूची का औसत लौटाने के लिए एक फ़ंक्शन avg:
    avg=: +/ % #
    
  • जल्दी से सुलझाएं:
    quicksort=: (($:@(<#[) , (=#[) , $:@(>#[)) ({~ ?@#)) ^: (1<#)
    


पर्ल

यहां पर्ल प्रोग्रामिंग भाषा में उदाहरण दिए गए हैं:

  • डुप्लिकेट शब्दों की तलाश करें
पर्ल -0777 -ne 'print "$.: doubled $_\n" while /\b(\w+)\b\s+\b\1\b/gi'
  • /usr/dict/words में पैलिंड्रोम्स ढूंढें
पर्ल-एलएनई 'print if $_ eq reverse' /usr/dict/words
  • *.c फ़ाइलों का इन-प्लेस संपादन सभी फू को बार में बदल रहा है
पर्ल -पी -आई.बक -ई 's/\bfoo\b/bar/g' *।सी

कई वन-लाइनर व्यावहारिक हैं। उदाहरण के लिए, निम्नलिखित पर्ल वन-लाइनर एक फ़ाइल में सभी बाइट्स को उलट देगा:

perl -0777e 'print scalar reverse <>' filename

जबकि अधिकांश पर्ल वन-लाइनर अनिवार्य हैं, अनाम फ़ंक्शंस, क्लोज़र, मैप, फ़िल्टर (grep) और फोल्ड (लिस्ट::यूटिल::रिड्यूस) के लिए पर्ल का समर्थन 'फ़ंक्शनल' वन-लाइनर के निर्माण की अनुमति देता है।

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

my $z = sub { grep { $a=$_; !grep { !($a % $_) } (2..$_-1)} (2..$_[0]) }

इसका उपयोग कमांड लाइन पर इस तरह किया जा सकता है:

पर्ल-ई'$,=",";print sub { grep { $a=$_; !grep { !($a % $_) } (2..$_-1)} (2..$_[0]) }->(shift)' संख्या

श्रेणी 2 - संख्या में अभाज्य संख्याओं की अल्पविराम से अलग की गई सूची का प्रिंट आउट लेने के लिए।

हास्केल

निम्नलिखित हास्केल (प्रोग्रामिंग भाषा) प्रोग्राम एक-लाइनर है: यह अपनी इनपुट लाइनों ASCII#Order को सॉर्ट करता है।

main = (mapM_ putStrLn . Data.List.sort . lines) =<< getContents -- In ghci a qualified name like Data.List.sort will work, although as a standalone executable you'd need to import Data.List.

इससे भी छोटा संस्करण:

main = interact (unlines . Data.List.sort . lines) -- Ditto.

कमांड लाइन पर प्रयोग करने योग्य जैसे:

cat filename | ghc -e "interact (unlines . Data.List.sort . lines)"


रैकेट

निम्नलिखित रैकेट (प्रोग्रामिंग भाषा) प्रोग्राम उपरोक्त हास्केल उदाहरण के बराबर है:

#lang racket
(for-each displayln (sort (port->lines) string<?))

और इसका उपयोग कमांड लाइन पर निम्नानुसार किया जा सकता है:

रैकेट -ई '(for-each displayln (sort (port->lines) string<?))'

पायथन

यूनिक्स कमांड लाइन पर सीधे वन-लाइनर निष्पादित करना पायथन (प्रोग्रामिंग भाषा) के -cmd ध्वज (संक्षेप में -c) का उपयोग करके पूरा किया जा सकता है, और आमतौर पर एक या अधिक मॉड्यूल के आयात की आवश्यकता होती है। कथनों को ; का उपयोग करके अलग किया जाता है; न्यूलाइन के बजाय. उदाहरण के लिए, यूनिक्स लंबी सूची के अंतिम फ़ील्ड को प्रिंट करने के लिए:

एलएस -एल | पायथन -सीimport sys;[sys.stdout.write(' '.join([line.split(' ')[-1]])) for line in sys.stdin]

पायथन रैपर

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

ls -l | pyp "whitespace[-1]" # "whitespace" represents each line split on white space in pyp
ls -l | pyline "words[-1]"  # "words" represents each line split on white space in pyline


निष्पादन योग्य पुस्तकालय

उदाहरण के लिए, Python CGIHTTPServer मॉड्यूल भी एक निष्पादन योग्य लाइब्रेरी है जो CGI के साथ एक वेब सर्वर के रूप में कार्य करता है। वेब सर्वर प्रारंभ करने के लिए दर्ज करें:

$ python -m CGIHTTPServer
Serving HTTP on 0.0.0.0 port 8000 …


टी.सी.एल

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

set example {foo bar grill}

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

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

proc list args {set args}


विंडोज पॉवरशेल

फ़ाइल Words.txt में पैलिंड्रोम ढूँढना

Get-Content words.txt | Where { $_ -eq -join $_[($_.length-1)..0] }

पॉवरशेल में पाइपिंग सिमेंटिक्स एक-लाइनर प्रोग्राम के साथ जटिल परिदृश्यों को सक्षम करने में मदद करता है। पॉवरशेल स्क्रिप्ट में यह एक-लाइनर अल्पविराम से अलग किए गए मान फ़ाइल से नामों और गणनाओं की एक सूची लेता है, और प्रत्येक नाम के लिए गणनाओं का योग लौटाता है।

ipcsv .\fruit.txt H F, C|Group F|%{@{"$($_.Name)"=($_.Group|measure C -sum).Sum}}|sort value


यह भी देखें

संदर्भ

  1. 10 PRINT CHR$ (205.5 + RND (1)); : GOTO 10 (PDF). Mit Press. 2014. p. 148. ISBN 9780262526746. Retrieved 3 July 2018.
  2. "RUN magazine issue 35".
  3. "एकोर्न यूजर वन-लाइन गेम्स (एस्केप फ्रॉम वोरोस, लेक्सियास, रेस टू वर्पोन, स्टॉर्म क्लाउड्स ओवर ज़क्किट, ज़ेंडर (एकेए लर्च))". bbcmicro.co.uk. Retrieved 3 July 2018.
  4. Following are direct quotes from Tcl Programming at Wikibooks that are available under the Creative Commons Attribution-ShareAlike License.


बाहरी संबंध

  • Perl Programming links
  • Wikibooks Free Tcl Programming introduction & download pdf
  • SourceForge, download website and also Multiple computer languages
  • Tcl Sources, main Tcl and Tk source code download website
  • Tcler's Wiki, Tcl/Tk scripts and reference clearing house
  • TkDocs, Tcl/Tk Official documentation and archives