कभी-कभी आपको किसी सीक्वेंस को एक-एक एलिमेंट के बजाय टुकड़ों की शृंखला के रूप में देखना पड़ता है। grouping, splitting और splitting.monotonic वोकेबुलरी आपको ऐसा करने के चार तरीके देती हैं।
group: आकार n के अलग-अलग टुकड़ेgroup ( seq n -- groups )
USING: grouping ;
{ 1 2 3 4 5 6 7 } 3 group .
! => { { 1 2 3 } { 4 5 6 } { 7 } }
अगर सीक्वेंस की लंबाई n का गुणज नहीं है, तो अंतिम समूह n से छोटा होता है।
clump: आकार n की ओवरलैपिंग स्लाइडिंग विंडोclump ( seq n -- clumps )
USING: grouping ;
{ 1 2 3 4 5 } 2 clump .
! => { { 1 2 } { 2 3 } { 3 4 } { 4 5 } }
अगर सीक्वेंस n से छोटा है, तो परिणाम खाली होता है।
split-when: जहाँ भी कोई प्रेडिकेट सही लौटाए, वहाँ तोड़िएsplit-when ( seq quot: ( elt -- ? ) -- pieces )
USING: splitting ;
{ 1 2 0 3 4 0 5 } [ zero? ] split-when .
! => { { 1 2 } { 3 4 } { 5 } }
हर एलिमेंट के लिए प्रेडिकेट को अलग से कॉल किया जाता है; जो एलिमेंट सही लौटाते हैं वे ब्रेक पॉइंट होते हैं और परिणाम में नहीं रखे जाते।
monotonic-split: जहाँ पड़ोसी जोड़ी की जाँच फेल हो, वहाँ रन तोड़िएmonotonic-split ( seq quot: ( a b -- ? ) -- pieces )
USING: splitting.monotonic ;
{ 1 1 2 2 2 3 } [ = ] monotonic-split .
! => { { 1 1 } { 2 2 2 } { 3 } }
प्रेडिकेट पड़ोसी जोड़ियों पर चलता है। जब तक वह सही लौटाता है, रन जारी रहता है; जब वह f लौटाता है, तो नया टुकड़ा शुरू होता है। [ = ] के साथ आपको बराबर एलिमेंट के रन मिलते हैं; [ <= ] के साथ गैर-घटते रन मिलते हैं; और इसी तरह।
group/clump: आप जानते हैं कि आकार कितना चाहिए।split-when: आप जानते हैं कि ब्रेक एलिमेंट कैसा दिखता है।monotonic-split: आप जानते हैं कि दो पड़ोसी एलिमेंट को एक साथ रखने वाली बात क्या है।एंटवर्प के मार्शलिंग यार्ड में आज फिर एक व्यस्त रात है। आप ड्यूटी पर तैनात डिस्पैचर हैं: आने वाली मालवाहक कारों को जाने वाली ट्रेनों में फिर से लगाना है, कपलिंग की जाँच करनी है, जंक्शनों पर मार्ग बाँटने हैं, और बिलिंग के लिए एक जैसे कार्गो को एक साथ करना है।
हर कार एक स्ट्रिंग है जिसमें यह लिखा होता है कि उसमें क्या भरा है:
"coal", "timber", "crates", आदि।
couple फंक्शन बनाइए जो कारों का एक ऐरे और एक लंबाई n लेता है, और n-n कारों वाली ऐसी ट्रेनें लौटाता है जिनमें कोई कार दो बार न आए। अगर कारों की संख्या बराबर न बँटे तो अंतिम ट्रेन छोटी हो सकती है।
{ "coal" "coal" "coke" "ore" "ore" "timber" "timber" } 3 couple .
! => { { "coal" "coal" "coke" } { "ore" "ore" "timber" } { "timber" } }
peek-couplings फंक्शन बनाइए जो कारों का एक ऐरे लेता है और हर पड़ोसी जोड़ी लौटाता है, ताकि निरीक्षक हर कपलिंग की जाँच कर सके।
{ "coal" "ore" "timber" "crates" } peek-couplings .
! => { { "coal" "ore" } { "ore" "timber" } { "timber" "crates" } }
split-at-junctions फंक्शन बनाइए जो कारों का एक ऐरे और junctions का एक ऐरे (यानी वे कारें जो विराम बिंदु दर्शाती हैं) लेता है, और जंक्शन कारों के बीच के खंड लौटाता है। जंक्शन कारें खुद नहीं रखी जातीं।
{ "coal" "coal" "switch" "ore" "switch" "timber" }
{ "switch" } split-at-junctions .
! => { { "coal" "coal" } { "ore" } { "timber" } }
coalesce-cargo फंक्शन बनाइए जो कारों का एक ऐरे लेता है और एक ही कार्गो ढोने वाली लगातार कारों को एक-एक समूह में जोड़ देता है।
{ "coal" "coal" "ore" "ore" "ore" "timber" "coal" } coalesce-cargo .
! => { { "coal" "coal" } { "ore" "ore" "ore" } { "timber" } { "coal" } }
Exercism पर साइन अप कीजिए और Factor को 47 कॉन्सेप्ट163 अभ्यास तथा असली इंसानों से मिलने वाली मेंटरिंग के साथ सीखिए और उसमें महारत हासिल कीजिए, वह भी बिल्कुल मुफ्त।