GolfScript का एक उन्नत संस्करण [बंद]


12

मैं और भी छोटे कामों के लिए एक बेहतर गोल्फस्क्रिप्ट लिखने की योजना बना रहा हूं जो अधिक चीजें कर सकते हैं। यह कोई चुनौती नहीं है; यह प्रतिक्रिया और अनुरोधों पर एक अनुरोध है कि मुझे क्या करना चाहिए। (टैग देखें)

मुझे यकीन नहीं है कि यह सामुदायिक विकी होना चाहिए। यदि आप ऐसा सोचते हैं, तो एक मॉडरेटर को इसे बदलने के लिए बस झंडा दें :)

यह भाषा गोल्फस्क्रिप्ट के समान होगी। यह अभी भी रूबी में लिखा गया है। हालाँकि, इसके कुछ अंतर हैं:

  • `एक स्ट्रिंग सीमांकक के रूप में उपयोग करना , क्योंकि यह एक असामान्य चरित्र है, इसलिए कम भागने की आवश्यकता होगी। (एक अन्य चरित्र अपने कार्य को बदल सकता है, जैसे #(उस पर बाद में)। \`एक बैकटिक \\से बचने के लिए , एक बैकस्लैश से बचने के लिए, और कोई अन्य एस्केप सीक्वेंस नहीं हैं। यदि आपको एक नई पंक्ति की आवश्यकता है, तो स्ट्रिंग में एक वास्तविक शाब्दिक नई पंक्ति चिपकाएँ।
  • Rationalरूबियस एस का उपयोग मनमाने ढंग से सटीक फ्लोटिंग पॉइंट के लिए करना, जो कि गोल्फस्क्रिप्ट की प्रमुख खामियों में से एक है।
  • प्रकारों को अन्य प्रकारों में बदलने की क्षमता। उदाहरण के लिए, आप किसी ब्लॉक को स्ट्रिंग में बदल सकते हैं।
  • नियमित अभिव्यक्ति। शायद के साथ बनाया "..."। साथ ही उनके लिए ऑपरेटरों को ओवरलोड किया जाएगा। उदाहरण के लिए, "\W"~{`Invalid: non-word character`}{`OK`}if। ब्लॉक की तरह एक चर से धक्का दिया जब स्वचालित रूप से निष्पादित करेगा।
  • फ़ाइल और दिनांक ऑब्जेक्ट, जो कि गोल्फस्क्रिप्ट में असंभव था, अधिक सामान करने के लिए। इनमें शाब्दिक नहीं होंगे, लेकिन इन्हें शुरू करने के लिए कार्य होंगे, जैसे कि `file.txt`fl(फ़ाइल-मेकिंग-फ़ंक्शन का नाम बदल सकता है)।
  • हो सकता है होश आ जाए, लेकिन मुझे उस पर यकीन नहीं है। क्या मैं?
  • हेल्पर और भी अधिक करने के लिए कार्य करता है। उदाहरण के लिए, `http://example.com`netनेटवर्क एक्सेस के लिए (फिर से, netऑपरेटर का नाम बदला जा सकता है)। rbरूबी कोड के रूप में एक स्ट्रिंग निष्पादित करने के लिए। इनमें से कई और होंगे; सुझावों का स्वागत है।
  • कोई टिप्पणी नहीं, ताकि #कुछ और के लिए इस्तेमाल किया जा सके। यदि आप एक टिप्पणी चाहते हैं, `comment here`;तो ठीक काम करेगा। (शायद समारोह #बदल सकते हैं `)
  • यह इस तरह से पूरी तरह से फिर से लिखा जाएगा कि कार्यों को जोड़ना बहुत आसान हो जाएगा। मूल रूप से, कोड अधिक पठनीय होगा। (क्या आपने गोल्फस्क्रिप्ट स्रोत देखा है? :/)
  • यह गितुब पर होगा इसलिए इस पर सहयोगात्मक रूप से काम किया जा सकता है। मैं इसे एमआईटी या कुछ के तहत लाइसेंस दूंगा।
  • कोई अंतिम न्यूलाइन नहीं, इसलिए धोखा देने वाला काम करता है: पी

और मैं इन्हें अलग कर रहा हूं क्योंकि मुझे लगता है कि वे सबसे कठोर और उपयोगी परिवर्तन हैं (केवल अस्थायी बिंदु को छोड़कर)

  • इसमें कई रूबी कार्य अंतर्निहित होंगे। उदाहरण के लिए, shuffle(जिसे संक्षिप्त किया जा सकता है sf) (पहले लिया गया 9 वर्ण ), tr(पहले के 14 वर्ण ), sample( sm, पहले का .,rand=), flatten( fl, पहले का ???), आदि।
  • यह रेम्बु की तरह फलीभूत होगी। उदाहरण के लिए, अब आप कर सकते हैं ~:a0<{0a-}aIF(अक्षर चर नाम का उपयोग करके) ~:$0<{0$-}$if(सॉर्ट फ़ंक्शन को ओवरराइट करने के बजाय )। (उदाहरण यहाँ से ) ध्यान दें कि इस तरह, यह स्थिति-असंवेदनशील है, और चर नामों में संख्याओं की अनुमति नहीं है। यह मेरी राय में ठीक है क्योंकि यह एक गोल्फ भाषा है: पी
  • इसमें डिबगिंग होगी। मैं एक ध्वज निर्दिष्ट करने की क्षमता जोड़ सकता हूँ सरणी सीमांकक, तत्व सीमांकक, आदि, संख्या आउटपुट (तर्कसंगत, फ्लोट, या इंट?), एक समय में एक निर्देश के माध्यम से कदम, टोकन और कार्यक्रम को चलाने के बजाय प्रत्येक टोकन का उत्पादन करना। आदि।

तो, मेरा सवाल है: क्या सुधार करना है? आपको क्या लगता है मुझे जोड़ना चाहिए?

इसके लिए कोई अन्य विचार, इससे पहले कि मैं इसे कोड करना शुरू करूं?


एहसास है कि यदि आप जोड़ने के मामले में आप संवेदनशीलता खो देते हैं।
मारिनस

@marinus मुझे एहसास है कि मुझे यह स्पष्ट करना चाहिए था; संपादन ...
Doorknob

इसके अलावा जो वास्तव में इसकी आवश्यकता है वह स्पष्ट I / O (इंटरैक्टिव कार्यक्रमों के लिए) करने का एक तरीका है। यदि प्रोग्राम स्पष्ट I / O का उपयोग करता है, तो दुभाषिया पहले से जांच कर सकता है और यदि यह नहीं करता है तो केवल I / O को निहित करता है।
मारिनस

@marinus बढ़िया है, आपको लगता है कि तब जोड़ने चाहिए एक जवाब के रूप :)
दरवाज़े

1
@ मेरी नई भाषा पर मेरा विकास काफी जीवंत है, हालाँकि मैं हाल ही में काफी व्यस्त रहा हूँ, इसलिए मैंने इसके साथ थोड़ी देर के लिए बहुत कुछ नहीं किया है। इनमें से कुछ विचार केवल अच्छे विचार नहीं हैं, जो कि मैं उपयोग नहीं कर रहा हूं: P
Doorknob

जवाबों:


17

लचीले I / O

इंटरेक्टिव कार्यक्रमों के लिए वर्तमान में गोल्फस्क्रिप्ट का उपयोग नहीं किया जा सकता है। मैं प्रस्तावित करता हूं कि स्पष्ट इनपुट के लिए कुछ कार्य जोड़े जाएं (यानी readline, getcharऔर मित्र)। दुभाषिया को यह देखना चाहिए कि प्रोग्राम इसे चलाने से पहले इनका उपयोग करता है या नहीं।

यदि प्रोग्राम कोई इनपुट फ़ंक्शन नहीं कहता है, तो दुभाषिया को गोल्फस्क्रिप्ट की तरह कार्य करना चाहिए।

मैं दुभाषिए से रनटाइम में उत्पन्न eval'ed कोड में इनपुट फ़ंक्शंस का पता लगाने की उम्मीद नहीं करूंगा, लेकिन अगर यह किसी तरह से, कुडोस कर सकता है।


यह एक महान विचार है; सीमित io गोल्फस्क्रिप्ट की बड़ी सीमाओं में से एक है। +1
डोर्कनोब

11

कम निर्मित

सभी अंतर्निहित चरित्रों के लिए एकल-वर्ण उपनाम जो उनके पास नहीं है। मैं baseबहुत अधिक का उपयोग करूंगा अगर यह बस था B


लेकिन क्या होगा यदि आप bएक चर नाम के रूप में उपयोग करते हैं ? फिर भी; अच्छा विचार; यदि आप फ़ंक्शन का उपयोग करने जा रहे हैं, और आप फ़ंक्शन का उपयोग नहीं कर रहे हैं, तो यह उस नाम का उपयोग न करने के लिए याद है, तो यह आपको बिल्कुल प्रभावित नहीं करता है।
दरवाज़े

@DoorknobofSnow, आप पहले से ही चर नाम के रूप में अंतर्निहित (और यहां तक ​​कि टोकन जैसे ^या $) का उपयोग कर सकते हैं । यह उस समस्या को किसी भी बदतर नहीं बनाता है। इसके अलावा, मैंने एलियास को सुझाव दिया है कि वह आपको पीछे की ओर अनुकूलता प्रदान करने की अनुमति देता है, इसलिए यदि आपको छोटे उपनाम से कुछ और सौंपा जाए तो आपको लंबे नाम का उपयोग करना होगा।
पीटर टेलर

4
Zके लिए zipभी बहुत उपयोगी होगा।
हावर्ड

शायद हम गोल्फस्क्रिप्ट के लिए एक आधिकारिक मानक पुस्तकालय जारी कर सकते हैं । लेकिन मैं इस बारे में स्पष्ट नहीं हूं कि इसे समाधानों में कैसे शामिल किया जा सकता है (गायब है #includeऔर "#{IO.read'lib'}"~बहुत लंबा है)।
हॉवर्ड

@ हॉवर्ड अब यह एक विचार है ... मैं अपनी भाषा में पुस्तकालयों को जोड़ सकता हूं, शायद पसंद करें mylang -Llibname somefile.ext
दरवाज़े

9

संयुक्त div-mod

यह कुछ सुझावों की तुलना में थोड़ा अधिक आला है, लेकिन संख्या-सिद्धांत कार्यक्रमों पर काम करते समय मैं अक्सर खुद को एक ऑपरेशन चाहता हूं जो दो पूर्णांकों को पॉप करता है aऔर bस्टैक और पुश से a/bऔर a%b। (वर्तमान में यह है 1$1$/@@%)।


चूंकि यह बहुत आला है, शायद dvmDiV-Mod के लिए कुछ ऐसा है । सभी विचारों के लिए धन्यवाद :-) +1
दरवाज़े

8

नंबर

लेक्सर को ऐसे बदलें कि लीडिंग 0 नंबर का हिस्सा न हो:

# current behaviour
01     # -> 1

# new
01     # -> 0 1

इसके _बजाय नकारात्मक संख्याओं के साथ लिखा जाना चाहिए :

# current behaviour
1 2-3   # -> -1 3

# new
1 2_3     # -> 1 2 -3

वाह, यह दिलचस्प है। आमतौर पर आप आमतौर पर एक पंक्ति में दो नंबरों को धक्का नहीं देते हैं, लेकिन इससे बहुत मदद मिलेगी। नकारात्मक बात करने के बजाय, बहुत अधिक है 0 100-नकारात्मक 100 के लिए +1
दरवाज़े

1
मैंने पहले इस बारे में सोचा है। नकारात्मक पूर्णांक शाब्दिक के लिए कोई समर्थन नहीं होना चाहिए। यह पहले से ही संभाला हुआ है ~। जैसे -1 है 0~। यह छोटी संख्या को एक वर्ण से अधिक लंबा बनाता है, लेकिन बाद में व्हाट्सएप के लिए मध्यम लगातार आवश्यकता को हटा देता है -
पीटर टेलर

एक मिनट रुको, आप कैसे धक्का देंगे, उदाहरण के लिए, 1001? मुझे लगता है कि आप शून्य का नेतृत्व कर रहे हैं, न कि पीछे।
दरवाज़े

@DoorknobofSnow राइट
हावर्ड

आप क्या करने के बारे में सोचेंगे {0\-}:~;( ~नकारात्मक-एक संख्या) और notबिटवाइज़ (बस की तरह and or xor) के लिए उपयोग करना ?
दरवाज़े

8

पूरे ढेर तक पहुंच

GolfScript एक स्टैक-आधारित भाषा है, लेकिन सभी तक पहुंच है, लेकिन स्टैक पर शीर्ष तीन आइटम <integer>$nth आइटम की प्रतिलिपि बनाने के लिए सीमित है । पोस्टस्क्रिप्ट की rollकमांड जैसा कुछ होना उपयोगी होगा ताकि तीन से अधिक "लाइव" चर के साथ काम करना आसान हो।

आदर्श रूप से एक-arg और दो-arg संस्करण होंगे, लेकिन अगर आसपास पर्याप्त नाम नहीं हैं, तो एक-arg को एक-वर्ण वाले के लिए वरीयता मिलनी चाहिए।

वन-आर्ग बस रोल करने के लिए मदों की संख्या लेता है। जैसे 1 rollकुछ नहीं करता; 2 rollके बराबर है \; 3 rollके बराबर है @; 4 rollऔर उच्च संख्या के लिए एक मौजूदा समतुल्य नहीं है; निकटतम जो संभव है वह कुछ ऐसा है

]-4/()\+\+[]*-1%~

(और यह भी स्टैक, या सक्रिय पर कुछ पदों पर गैर-पूर्णांक को संभाल नहीं करता है [, और लगभग निश्चित रूप से छोरों के अंदर भी टूट जाता है)।

दो-आर्ग एक भी रोल करने के लिए एक राशि लेता है; a b roll2के बराबर है {a roll}b*


तो, रूबी की तरह rotate। आपको इसे सीडब्ल्यू जवाब में संपादित करना चाहिए।
दरवाज़े

@ डॉर्कनोब, नहीं। मैं ढेर के एक स्लाइस पर काम करने की बात कर रहा हूं, किसी ऐरे पर नहीं।
पीटर टेलर

उम्म ... मुझे यकीन नहीं है कि तुम क्या मतलब है। मैं पोस्टस्क्रिप्ट से परिचित नहीं हूं, लेकिन rollसिर्फ सरणी को घुमाता हूं , है ना?
दरवाज़े

@ डॉर्कनोबोफ़्सवॉइन, स्टैक । एक सरणी एक आइटम है जो स्टैक पर जाती है।
पीटर टेलर

ओह, तो यह पूरे ढेर को घुमाता है । आह, यह उपयोगी हो सकता है! +1
दरवाज़े

8

CJam

मैंने "एक बेहतर गोल्फस्क्रिप्ट" को लागू किया है और इसे CJam कहा जाता है - http://sf.net/p/cjam
अब दूसरी रिलीज़ (संस्करण 0.6) में यह पहले से ही कई है यदि अधिकांश विशेषताओं पर चर्चा नहीं की गई है। मैं उन्हें सूचीबद्ध करने की कोशिश करूँगा:

  • अभी भी रूबी में लिखा है - नहीं, जावा
  • का उपयोग कर `(कोई है, लेकिन यह कम से कम एस्केपिंग साथ डबल-कोटेड तार का उपयोग करता है - एक स्ट्रिंग परिसीमक के रूप में \केवल पलायन \और ")
  • फ़्लोटिंग पॉइंट - समर्थित, लेकिन केवल मानक "डबल", मनमाना परिशुद्धता नहीं
  • प्रकारों को अन्य प्रकारों में बदलें - हाँ
  • नियमित अभिव्यक्ति - अभी तक नहीं, लेकिन योजनाबद्ध; विशेष संचालकों के साथ नियमित तार का उपयोग करेगा
  • फ़ाइल और दिनांक ऑब्जेक्ट - नहीं, लेकिन वर्तमान दिनांक / समय प्राप्त कर सकते हैं
  • हैश - उन लोगों को लगता है कि अजगर डाइक या जावा नक्शे की तरह हैं, तो वे समर्थित नहीं हैं (भविष्य में विचार कर सकते हैं)
  • सहायक कार्य और भी अधिक करने के लिए - हाँ, बहुत कुछ
  • `http://example.com`net - "example.com"g
  • रूबी कोड - nope के रूप में एक स्ट्रिंग निष्पादित करें
  • कोई टिप्पणी नहीं - बिल्कुल, #कुछ और के लिए इस्तेमाल किया,"comments like this";
  • कार्यों को जोड़ना आसान है - मुझे ऐसा लगता है, लेकिन मैं भी पक्षपाती हूं :)
  • जीथब पर - इससे भी बेहतर (मेरी राय में, शूट न करें) - एचटी का उपयोग करके, सोर्सफॉर्ग पर
  • एमआईटी के तहत लाइसेंस प्राप्त - हाँ
  • कोई अंतिम न्यूलाइन नहीं - सही है
  • फेरबदल - mr
  • tr - er
  • नमूना - नहीं किया गया, _,mr=
  • समतल - नहीं किया, लेकिन शायद प्राप्त करना आसान है
  • फूला हुआ - नहीं, लेकिन पहचानकर्ताओं को अलग होने की जरूरत नहीं है
  • डिबगिंग - केवल स्टैक के निशान और edस्टैक दिखाने के लिए ऑपरेटर

  • लचीला I / O - हाँ, लेकिन केवल स्पष्ट इनपुट

  • छोटा बिल्ट-इन्स - हाँ, b= बेस, z= ज़िप
  • अलग-अलग अग्रणी 0 - नहीं, लेकिन पूर्वनिर्धारित चर का उपयोग कर सकते हैं
  • असंदिग्ध -- हाँ, लेकिन साथ नहीं _; 1 2-3-> 1 2 -3; 1 2m3->-1 3
  • रोल / स्टैक को घुमाएं - नोप
  • सरणी सेट - t
  • Divmod - md
  • परिवर्तनकर्ता (पहचानकर्ताओं के लिए) - हां, नीचे और अधिक
  • कार्टेशियन उत्पाद - बिल्कुल समान नहीं, लेकिन हां, m*
  • यूनिकोड ऑपरेटरों - नहीं
  • एकल-चरित्र पहचानकर्ता - पूर्वनिर्धारित संचालकों के पास 1 या 2 वर्ण हैं और चर एकल-वर्ण अपरकेस अक्षर हैं; वे सभी को lexer / पार्सर को भ्रमित किए बिना समेटा जा सकता है
  • ब्लॉकों पर ऑपरेटरों - नहीं
  • स्थिर प्रकार - हाँ
  • प्रतीकों को कोड ब्लॉक में वापस करें - नहीं, लेकिन बाद में जोड़ सकते हैं
  • वर्तमान तिथि / समय - et
  • कमांड लाइन आर्ग्स - ea
  • बिल्ट-इन को स्पष्ट रूप से अलग करना - हाँ, लेकिन राजधानियाँ चर हैं; बिल्ट-इन या लोअरकेस और विशेष पात्रों के साथ शुरू होते हैं
  • न्यूनतम और अधिकतम - हाँ, वर्तमान में केवल 2 मान: e<,e>
  • पूर्ण मान - z(गोल्फस्क्रिप्ट में absकमी नहीं है)
  • एक सरणी का योग और उत्पाद - :+,:*
  • मैनहट्टन दूरी - nope
  • chr - c(एक वर्ण में परिवर्तित होता है, न कि एक स्ट्रिंग)
  • स्टैक पर एक स्ट्रिंग फैलाएं - सीजेएम तार वर्णों से बने होते हैं, संख्या नहीं; यह अभी भी है पात्रों को फैलाने के लिए{}/
  • इसका एक संस्करण :खपत करता है जो संग्रहीत है - नोप
  • के लिए ऑपरेटर >=, <=- नहीं, उपयोग <!,>!
  • base64 और zlib - nope
  • 1 $, 2 $, 3 $, 4 $, 5 $ - के लिए शॉर्टकट
  • शीर्ष दो स्टैक आइटम की नकल करें - योजना बनाई; अब उपयोग के लिए1$1$
  • स्थानीय चर - nope
  • HQ9 + सुविधाएँ - नहीं, धन्यवाद

CJam में बहुत अधिक विशेषताएं हैं, https://sourceforge.net/p/cjam/wiki/Operators/ देखें


7
मैं SourceForge और मर्क्यूरियल GitHub से बेहतर होने से असहमत हूं।
nyuszika7h

1
@ nyuszika7h यह ठीक है, हम सभी की प्राथमिकताएँ हैं
विज्ञापन छोड़ दें क्योंकि SE EVIL

मैंने सिर्फ अपना पहला सीजेएम उत्तर पोस्ट किया , क्योंकि मेरे गोल्फस्क्रिप्ट उत्तर को एक उचित sqrt फ़ंक्शन की सख्त आवश्यकता थी। सीजेएम गोल्फस्क्रिप्ट की तुलना में बहुत तेज है!
डेनिस


@aditsu आप सीजेएम को गोल्फस्क्रिप्ट की एक बोली या गोल्फस्क्रिप्ट से प्रेरित एक नई भाषा पर विचार करेंगे? (यहां कारण मैं पूछ रहा हूं: codegolf.stackexchange.com/questions/37464/… )
मार्टिन

6

लीकर बदलो

GolfScript के लेक्सर एक रूबी पहचानकर्ता (कुछ भी जो रेगेक्स से मेल खाता है [_a-zA-Z][_a-zA-Z0-9]*) को एक एकल टोकन के रूप में मानते हैं । यदि इसके बजाय इसे [a-zA-Z]+एक टोकन के रूप में माना जाता है जो _एक अंतर्निर्मित होगा और एक व्हाट्सएप को अलग करने के बिना एक शाब्दिक पूर्णांक द्वारा एक अल्फा चर का पालन करने की अनुमति देगा।


ठीक है, वर्तमान में मैं केवल उपयोग कर रहा हूं [a-z]+|[A-Z]+, मूसिंग के लिए, इसलिए अंडरस्कोर मुफ्त है। यह एक दिलचस्प और बहुत ही अनूठा विचार है! +1
डोर्कनोब

5

यूनिकोड उपनाम

एकाधिक-वर्ण कमांड में यूनिकोड उपनाम हो सकते हैं। यह स्कोर पर सहेजता है जब स्कोर वर्णों में गिना जाता है और बाइट्स में नहीं।


7
उह ... हम एक और एपीएल नहीं चाहते ...
जॉन ड्वोरक

1
गोल्फस्क्रिप्ट APL, यूनिकोड या नहीं की तरह कुछ भी नहीं है। हमारे पास पहले से ही कई अन्य एपीएल हैं, जैसे जे और के। (या यहां तक ​​कि आर जो मुझे काफी एपीएल-प्रेरित लगता है, इस बात के लिए कि आप शाब्दिक अनुवाद बहुत बार कर सकते हैं)
marinus

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

मुझे लगता है कि एपीएल जे की तुलना में अधिक सुपाठ्य है, निश्चित रूप से गोल्फस्क्रिप्ट से अधिक सुपाठ्य है।
मारिनस

5

स्थिर प्रकार

$ब्लॉक पर निर्मित एक स्थिर तरह प्रदर्शन करना चाहिए।


5

ऐरे सेट ऑपरेटर

["A" "B" "C" "D" "E" "F"] -1 4 S    # -> ["A" "B" "C" "D" -1 "F"]

कोई भी अंतर्निहित हम उसके लिए उपलब्ध करा सकते हैं?


+1 मैंने सरणी सेट लागू करने के बारे में एक ब्लॉग पोस्ट लिखना शुरू किया, लेकिन इसे कभी भी समाप्त नहीं किया। यह वर्तमान में पूर्ण सामान्यता में बहुत कठिन है। यह कुछ चुनौतियों के लिए एक बड़ा अंतर होगा।
पीटर टेलर

मुझे विश्वास नहीं हो रहा है कि यह पहले से ही गोल्फ के लिए नहीं बनाया गया है। +1
दरवाज़े

5

एकल-चरित्र पहचानकर्ता

यह एक कोड गोल्फ समाधान की तरह बहुत सारे चर होने जा रहा है नहीं है। और यह रिक्त स्थान पर बचाएगा।


हम्म .. यह भी पार्सर बदलकर किया जा सकता है। शायद इस व्यवहार को निर्दिष्ट करने के लिए एक झंडा? महान विचार! +1
दरवाज़े


3

रेगेक्स समर्थन

रेगेक्स समर्थन की कमी ने मुझे हमेशा गोल्फ के लिए डिज़ाइन की गई भाषा में अजीब लगा। यह बहुत अच्छा होगा

  • <string> <string> <string> y(उर्फ tr, इसके लिए पर्ल के वन-चार उपनाम का उपयोग करके)
  • <string> <string> <string> s (विकल्प)
  • <string> <string> <block> s (कॉलबैक के विकल्प)
  • <string> <string> m (मैच)

मैंने अपने प्रश्न में पहले से ही रेगेक्स का उल्लेख किया है।
दरवाज़े

3

वर्तमान तिथि / समय के लिए बिल्‍डिन

वर्तमान में रूबी evals का उपयोग करके दिनांक / समय प्राप्त करना बहुत ही विचित्र है।

D     # -> [2013 12 31]
T     # -> [23 59 59]

क्या यह लीमा या ज़ुलु में तारीख / समय देता है?
पीटर टेलर

@PeterTaylor पता नहीं है - समय बदल रहा है ;-)
हावर्ड

@ क्या आपका मतलब है, "समय, वे एक बदलते हैं" ?
जॉन ड्वोरक

पहले से ही ओपी में समय प्रकार के रूप में उल्लेख किया गया है।
दरवाज़े

3

बनाओ; & ^ ^ निर्मित ब्लॉकों पर उपयोगी कुछ करते हैं

ईजी <array/string> <block> |को इंडेक्स फ़ंक्शन के रूप में उपयोग किया जा सकता है

[0 -10 -20 30 40 -50 60] {0<} |   # -> [1 2 5]

<array/string> <block> &या के लिए कोई विचार <array/string> <block> ^?


array block =अब क्या करता है?
जॉन ड्वोरक

@JDDvorak तुलना करें। उपयोगी है यदि आप किसी स्ट्रिंग को किसी ब्लॉक से तुलना करना चाहते हैं, जैसे "0<" {0<} =
हावर्ड

आपको कितनी बार इसकी आवश्यकता है? मैं इसके बजाय ड्रॉप करना चाहता हूं, और array block ="चयन द्वारा विधेय के लिए" का उपयोग करें
जॉन डेवोरक

@JDDvorak द्वारा विधेय का चयन पहले से ही उपयोग करके लागू किया गया है ,
हावर्ड

ओह कोई बात नहीं। :-)
जॉन ड्वोरक

2

कोड ब्लॉक में वापस प्रतीकों को चालू करने का एक तरीका

वर्तमान में, हम कोड ब्लॉक को प्रतीकों के साथ जोड़ सकते हैं :, लेकिन इस प्रक्रिया को उलटने का कोई तरीका नहीं है: कोड ब्लॉक से बंधे प्रतीक को निष्पादित करना ब्लॉक को निष्पादित करता है।

मैं इसे लागू करने के कुछ तरीके देख सकता हूं:

  1. नया सिंटैक्स जोड़ें, जैसे स्टैक #fooके मान को पुश fooकरने के लिए, भले ही वह कोड ब्लॉक हो, या

  2. एक कोड ब्लॉक में हर प्रतीक का विस्तार करने के लिए एक ऑपरेटर जोड़ें , ताकि ( _नए ऑपरेटर के रूप में उपयोग कर ), जैसे {2*}:dbl; {dbl dbl}_उत्पादन होगा {2* 2*}

मैं दोनों तरीकों से फायदे देख सकता हूं। उत्तरार्द्ध पूर्व के लिए स्थानापन्न कर सकता है, दो अतिरिक्त वर्णों की लागत पर ( {foo}_इसके बजाय #foo), लेकिन मैं पूर्व वाक्यविन्यास के लिए कुछ संभावित अनुप्रयोगों को देख सकता हूं जहां उन दो वर्णों का निषेधात्मक होगा (उदाहरण के array #func %बजाय उपयोग करना array {func} %)।

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


या तो मामले में, मैं प्रस्ताव करूंगा कि उन प्रतीकों का विस्तार जो मूल निर्मित आईएनएस (यानी रूबी कोड में लागू) के लिए बाध्य हैं, कुछ प्रकार के स्टब को वापस करना चाहिए, जिसे या तो असंभव होने के दौरान अंतर्निहित की कार्यक्षमता प्राप्त करने के लिए कहा जा सकता है। या बस ओवरराइड होने की संभावना नहीं है। उदाहरण के लिए #$(या {$}_) जैसे लौट सकते हैं {builtin_dollar}, जहां builtin_dollarके वास्तविक क्रियान्वयन होते हैं $में निर्मित (और #builtin_dollarया {builtin_dollar}_बस लौट जाना {builtin_dollar}ही)।

यह होगा की अनुमति देने का निर्माण-इन उनकी कार्यक्षमता के लिए उपयोग खोने के बिना नए सिरे से परिभाषित किया जाना है (देखें मेरे पहले सुझाव ), अगर मैं, कहते हैं, किसी कारण के लिए के अर्थ स्वैप करने के लिए करना चाहता था ताकि $और @, मैं सिर्फ कर सकता है #$ #@ :$; :@;(या {$}_ {@}_ :$; :@;)।


एक विस्तार मुझे यकीन नहीं है कि _यदि कोड ब्लॉक में चर असाइनमेंट हैं तो ऑपरेटर को क्या करना चाहिए। स्पष्ट बात यह होगी कि किसी भी :symbolटोकन को अछूता छोड़ दें और किसी भी चीज का विस्तार करें, लेकिन इससे _स्थानीय चर का उपयोग करके किसी भी कोड को तोड़ दिया जाएगा । यह बनाना नहीं तोड़ ऐसे कोड impractically जटिल हो सकता है, हालांकि।
इल्मरी करोनें

1
आपका दूसरा संस्करण सरणियों पर एक समतल ऑपरेटर के साथ मिलकर फिट होगा [[1] [2] [3]] _ -> [1 2 3]:।
हावर्ड

तो इसका परिणाम क्या होगा 2:A;{1:A;A}_?
हावर्ड

स्वाभाविक रूप से, {1:A;2}(या, तकनीकी होने के लिए, {1:A builtin_semicolon 2}यदि अंतर्निहित विस्तार सुविधा शामिल थी)। यदि "स्थानीय चर अपवर्जन" सुविधा को किसी प्रकार से शामिल किया गया था, तो यह शायद केवल मूल्यांकन कर सकता है {1:A;A}
इल्मरी करोनें

या और भी अधिक तकनीकी हो {builtin_1 :A builtin_semicolon 2}
हावर्ड

1

कमांड लाइन आर्ग्स के साथ चर पूर्व निर्धारित

दुर्भाग्य से, वहाँ किसी भी चार नहीं छोड़ दिया है, लेकिन शायद हम Aउस के लिए उपयोग कर सकते हैं ?


_उपलब्ध है। शायद वह? वैसे भी, हाँ, गोल्फस्क्रिप्ट को cmd लाइन आर्ग्स +1 लेने का एक तरीका चाहिए
Doorknob

0

मूल निवासी रूबी कार्य करता है जिसे मुझे लागू करना चाहिए

यह सामुदायिक विकी है; उन कार्यों को संपादित करने और जोड़ने के लिए स्वतंत्र महसूस करें जिन्हें मुझे लागू करना चाहिए!

प्रारूप: " nativeFunctionName( nameInMyLanguage)"

  • shuffle( sf)
  • tr( tr)
  • sample( sm)

0

APL और HQ9 + से भी सुविधाएँ लें!

  • शॉर्टकट, जैसे एपीएल में। संपादित करें: बस "यूनिकोड उपनाम" का उत्तर देखा। मेरा मतलब यही था :)
  • अन्य गोल्फ उन्मुख शॉर्टकट, जैसे H9 +, HQ9 +, CHIQRSX9 +

ठीक है, तो आप उसे कैसे प्रस्तावित करेंगे? कोई खास विचार?
डोरकनब

यूनिकोड वर्ण केवल एक वर्ण में जटिल चीजें करने की अनुमति देता है।
xem

@ स्नोर्कन ऑफ स्नो, मैंने अपने उत्तर को उन शॉर्टकट्स के साथ अपडेट किया, जिन्हें मैं देखना चाहता हूं: एपीएल के लोग, और CHIRQSX9 + :) से
xem

हम्म, hq9 + बात बहुत धोखा लगती है :-P
Doorknob

यह गोल्फ उन्मुख है: पी मेरी राय मेरी भाषा कम से कम के रूप में अच्छी तरह से करना चाहिए :)
xem

0

बिल्ट-इन को स्पष्ट रूप से अलग करना

उदाहरण के लिए राजधानियाँ: बिल्ट-इन; आधार संभव के लिए बी बना रहा है


1
जैसा कि ऊपर उल्लेख किया गया है कि अलग करने की कोई आवश्यकता नहीं है। अगर किसी को किसी बिल्डिन को ओवरराइट करना पसंद है तो उसे ऐसा करने में सक्षम होना चाहिए। मुझे यहां तक ​​कि ओवरराइटिंग ऑपरेटरों जैसे उपयोगी एप्लिकेशन भी मिले {-}:+
हावर्ड

कोई ज़रूरत नहीं है, यह भी इस मामले असंवेदनशील हो जाएगा।
दरवाज़े

2
चूंकि लक्ष्य छेद प्रति कम स्ट्रोक प्रदान करना है, इसलिए मामले की संवेदनशीलता और अधिक अंतर्निहित इंस मिशन प्रभाव की ओर प्रभावी ढंग से आगे बढ़ती है।

0

स्थानीय चर / बंद

एक चीज जो मुझे वास्तव में गोल्फस्क्रिप्ट में याद आती है वह है एक प्रतीक के मूल्य को अस्थायी रूप से बदलने की क्षमता ।

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

उपरोक्त से संबंधित, एक कोड ब्लॉक में प्रतीकों को उनके वर्तमान मूल्य से बांधना अच्छा होगा । निश्चित रूप से, मैं एक सरणी को सॉर्ट करने और रिवर्स {$-1%}:rsortकरने के लिए लिखने, कहने और उपयोग rsortकरने में सक्षम हो सकता हूं, लेकिन यह तब तक ही काम करता है जब तक कि $(या -1या %) की परिभाषा नहीं बदलती है, क्योंकि मेरा rsortफ़ंक्शन अभी भी वैश्विक प्रतीक कह रहा है $। यह कहने में सक्षम होना अच्छा होगा "चलो वर्तमान में rsortक्या करते हैं $-1%, भले ही उन प्रतीकों को बाद में फिर से परिभाषित किया जाए।"

विशेष रूप से, मानक पुस्तकालय इस तरह के बंधन का उपयोग कर सकता है। यह महसूस करना आश्चर्य की बात है कि, कहना, nपरिवर्तन के व्यवहार को बदल देता है puts, या यह !पूरी तरह से गड़बड़ कर देता है xor। (तब फिर से, यहां कुछ सावधानी बरती जानी चाहिए, क्योंकि, विशेष रूप से, putsमुड़ने के व्यवहार को बदलने की क्षमता जीएस के वर्तमान संस्करण में अंतिम नई रेखा को प्रिंट करने से बचने का एकमात्र तरीका है ।)

संपादित करें: प्रतीकों को कोड ब्लॉक में वापस लाने में सक्षम होना इस कार्यक्षमता को लागू करने की दिशा में एक लंबा रास्ता तय करेगा। विशेष रूप से, {foo}_उस उत्तर में सुझाए गए वाक्यविन्यास एक कोड ब्लॉक में सभी प्रतीकों का विस्तार करके प्रभावी रूप से स्थिर बंधन के एक स्तर का प्रदर्शन करेंगे। गहरी स्थैतिक बाइंडिंग के लिए एक फ़िक्सपॉइंट कॉम्बिनेटर के साथ संयोजन करें , और बॉब आपके चाचा ...


चलो - सभी फैंसी नई भाषाएँ आलसी मूल्यांकन का जश्न मनाती हैं ;-) चलो उस विशेषता को गोल्फस्क्रिप्ट में रखें।
हावर्ड

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

" वर्तमान में rsortक्या करते हैं $-1%, भले ही उन प्रतीकों को बाद में फिर से परिभाषित किया जाए"
कैलकुलेटरफ्लीन

0

अधिक अंतर्निहित कार्य

सभी एकल-अक्षर चर az और AZ कुछ सामान्य, उपयोगी फ़ंक्शन करें। कुछ बिल्ट-इन कि कमी है:

  • न्यूनतम और अधिकतम: सभी या कुछ शीर्ष 2 स्टैक मान, शीर्ष n स्टैक मान, एक सरणी पर
  • निरपेक्ष मूल्य
  • एक सरणी का योग और उत्पाद। {+}*जब आप कर सकते हैं तो क्यों करें S? यहाँ काम करने के लिए आपके पास 52 कार्य हैं!
  • मैनहट्टन की दूरी (यानी x1 y1 x2 y2 --> abs(x2-x1)+abs(y2-y1)। अब यह होना चाहिए @-A@@-A+अगर Aएक बिल्ट-इन निरपेक्ष मूल्य है। यह केवल मेरी सबसे हाल की पोस्ट के कौए के लिए आया था, लेकिन मुझे हमेशा लगा कि यह गोल्फ का विस्तार करने का एक अच्छा तरीका होगा: नीचे लिखें फ़ंक्शंस के लिए उन्हें इकट्ठा करना, और बिल्ट-इन के रूप में जोड़ना आसान होगा।
  • एक पूर्णांक को एक-वर्ण स्ट्रिंग (अजगर के बराबर chr) में बदलें ।
  • स्टैक पर एक स्ट्रिंग फैलाएं (वर्तमान में {}/)
  • इसका एक संस्करण :जो संग्रहित है, उसका उपभोग करता है। यह उपयोगी होने के लिए पहचानकर्ताओं को 'अटक' नहीं करना होगा।
  • के लिए ऑपरेटर >=,<=
  • जैसा कि किसी ने सुझाव दिया, एक वैरिएबल रखने का एक तरीका जिसमें स्टैक पर एक ब्लॉक होता है, इसे निष्पादित किए बिना। तो आप 1{\}{|}ifकुछ के लिए फार्म के ifs को कम कर सकते हैं1?\?|if
  • अंतर्निहित base64 रूपांतरण और zlib समर्थन एम्बेडिंग डेटा कम वर्ण लेने के लिए
  • बेस 64 से परे, कस्टम बेस 93 एनकोडिंग (सभी प्रिंट करने योग्य वर्णों का उपयोग करके स्ट्रिंग स्ट्रिंग सीमांकक नहीं बना)।
  • के लिए शॉर्टकट 1$, 2$, 3$, 4$,5$
  • एक ऑपरेटर शीर्ष दो स्टैक आइटम को कॉपी करने के लिए जैसा कि वे हैं, अर्थात \.@.@\

-3

यह अच्छा होगा यदि किसी फ़ंक्शन की अंतिम पंक्ति में लिखित मान या गणना स्वचालित रूप से वापस आ गई थी


3
यह ढेर आधारित है, तो ...
मारीनस

1
एक समारोह के रूप में ऐसी कोई बात नहीं है।
पीटर टेलर

कार्य कुछ भी वापस नहीं ... और वे बुलाया ब्लॉक कर रहे हैं
दरवाज़े

यह अच्छा हो सकता है ... किसी और भाषा में। (फ़ंक्शंस के अंत में कोई और अधिक कष्टप्रद रिटर्न स्टेटमेंट नहीं! याय! (लेकिन मुझे कभी भी स्टेटमेंट्स की ज़रूरत नहीं है, इसलिए ...)
कैलक्यूलेटरफनलीन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.