কখনও কখনও কোনো সিকোয়েন্সকে এলিমেন্টের পর এলিমেন্ট না ভেবে বরং টুকরো-র একটি সিরিজ হিসেবে দেখার দরকার পড়ে। 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 টি ওয়াগন থাকে এমন ট্রেনের অ্যারে রিটার্ন করবে, যেখানে ট্রেনগুলো পরস্পরকে ওভারল্যাপ করে না। সংখ্যাটি সমানভাগে না ভাগ হলে শেষ ট্রেনটি ছোট হতে পারে।
{ "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টি অনুশীলনী আর সত্যিকারের মানুষের মেন্টরিং দিয়ে শিখুন ও দক্ষ হয়ে উঠুন, সম্পূর্ণ বিনামূল্যে।