पर्ल 6 22/30
मैं यह देखने जा रहा हूं कि क्या Perl6 मेरे लिए अनुक्रम को घटा सकता है या नहीं।
ऐसा करने के लिए मैंने पर्ल में निर्मित आरईपीएल का उपयोग किया
$ perl6
> 1,2,4,7...*
Unable to deduce arithmetic or geometric sequence from 2,4,7 (or did you really mean '..'?)
> 1,2,4,7,10...*
1 2 4 7 10 13 16 19 22 25 28 31 34 37 40 43 46 49 52 55 58 61 64 67 70 ...
हम्म, मैं उस पैटर्न को देखता हूं जिसे पर्ल ने घटाया था। अगले मूल्य को प्राप्त करने के लिए 4 के बाद आप सिर्फ 3 जोड़ दें।
1,2,4,*+3...*
जो एक चरित्र को बचाता है जो कोड को Stöhr अनुक्रम 13 वर्णों में लंबी संख्याओं की अनंत सूची प्राप्त करने के लिए बनाता है।
यह कोड केवल REPL में कुछ उपयोगी करता है क्योंकि यह हमारे लिए परिणाम का संकेत प्रिंट करता है। इसे प्रिंट करने के लिए अन्यथा आपको परिणामों को प्रिंट करने के लिए पर्ल को स्पष्ट रूप से बताना होगा।
$ perl6 -e 'say 1,2,4,*+3...*'
( * + 3
बस एक कोड संदर्भ प्राप्त करने का एक तरीका है जो 3 रिटर्न देता है यह केवल तर्क है। इसे लिखने के अन्य तरीके होंगे { $_ + 3 }
, या -> $i { $i + 3 }
, { $^i + 3 }
या sub ($i){ $i + 3 }
)
पहले n तत्वों को उत्पन्न करने के लिए कुछ कॉल करने योग्य बनाने का सबसे छोटा तरीका तत्वों का एक टुकड़ा प्राप्त करना है।
{(1,2,4,*+3...*)[^$_]} # 22
शून्य संदर्भ में जो पहले $_
मान उत्पन्न करेगा , फिर उन्हें तुरंत फेंक दें।
शून्य संदर्भ के अलावा किसी भी चीज़ में यह एक अनाम कोड ब्लॉक (एक नाम के बिना एक मूल सबरूटीन) बनाता है जो एक तर्क लेता है।
# store it in a scalar variable
my $sub = {(1,2,4,*+3...*)[^$_]};
say $sub.(5);
# 1 2 4 7 10
# use it immediately
say {(1,2,4,*+3...*)[^$_]}.(5);
# 1 2 4 7 10
# pretend it always had a name
my &Stöhr-first = {(1,2,4,*+3...*)[^$_]};
say Stöhr-first 5;
अगर आपको वास्तव में लगता है कि इस चुनौती के लिए एक वैध के रूप में अर्हता प्राप्त करने के लिए एक नाम होना चाहिए, तो आप शायद ऐसा करेंगे:
sub s(\n){(1,2,4,*+3...*)[^n]} # 30
हालांकि s
, प्रतिस्थापन संचालक के लिए भी इसका उपयोग किया जाता है, इसे कॉल करने के लिए परेंस गैर-वैकल्पिक होते हैं। (आप इसे एक अलग नाम दे सकते हैं जो मुझे लगता है)
say s(5);
# 1 2 4 7 10