নেস্টেড তালিকাগুলির জন্য মানচিত্র
বলুন যে আপনি ম্যাট্রিক্সের মতো নেস্টেড তালিকা পেয়েছেন:
[[0 1 2][3 4 5][6 7 8]]
অথবা স্ট্রিংগুলির একটি অ্যারে:
["foo""bar"]
এবং আপনি নেস্টেড স্তরে একটি ব্লক মানচিত্র করতে চান (অর্থাত এটি প্রতিটি সংখ্যায় বা প্রতিটি অক্ষরের জন্য এটি প্রয়োগ করুন)। নিষ্পাপ সমাধান একটি নেস্টেড %
:
{{...}%}%
তবে, আপনি প্রকৃতপক্ষে অভ্যন্তরীণ ব্লকটিকে স্ট্যাকের উপরে ঠেলাতে পারেন এবং তারপরে ব্যবহার করতে পারেন f%
। f
হ'ল "অতিরিক্ত প্যারামিটার সহ মানচিত্র", সুতরাং এটি %
দ্বিতীয় পরামিতি হিসাবে ব্লকটি ব্যবহার করে বাহ্যিক তালিকায় ম্যাপ করবে :
{...}f%
দুটি বাইট সংরক্ষণ করুন।
আরেকটি ঝরঝরে কৌতুক ভালো কিছু করতে for (i=0; i<5; ++i) for (j=0; j<5; ++j) {...}
হয়
5,_f{f{...}}
বাইরেরটি f
প্রথম পরিসরে ম্যাপ করবে, অতিরিক্ত প্যারামিটার হিসাবে দ্বিতীয় ব্যাপ্তি সরবরাহ করবে। তবে এখন, আপনি যদি f
আবার ব্যবহার করেন তবে কেবল শীর্ষ স্ট্যাক উপাদানটি একটি অ্যারে হয়, সুতরাং আপনি এটির উপরের f
ব্লকটিকে মানচিত্র তৈরি করেন, অতিরিক্ত পরামিতি হিসাবে বাহ্যিক "পুনরাবৃত্তি পরিবর্তনশীল" সরবরাহ করে। এর অর্থ অভ্যন্তরীণ ব্লকটি স্ট্যাকের সাথে i
এবং চলমান j
।
কার্টেসিয়ান পণ্যটিতে কেবল একটি ব্লক ম্যাপিংয়ের মতোই এর একই সংখ্যক অক্ষর রয়েছে (যদিও জোড়গুলির জন্য অ্যারে হিসাবে আপনার প্রয়োজন পরে যদি সংক্ষিপ্ত হয়):
5,_m*{~...}%
পার্থক্যটি হ'ল এই সংস্করণটি সমস্ত জোড়ের জন্য একক অ্যারে ফলাফল দেয়, যেখানে দ্বিগুণ f
ফলিত একটি নেস্টেড তালিকার ফলস্বরূপ, যদি আপনি কোনও গ্রিডে ফলাফলগুলি সংরক্ষণ করতে চান তবে দরকারী হতে পারে, পুনরুক্তি ভেরিয়েবলগুলি স্থানাঙ্ক হিসাবে থাকে।
আমাকে এই কৌশলটি দেখানোর জন্য ডেনিসকে ধন্যবাদ।
0.6.4 আপডেট
f
এবং :
নিজেকে সহ অন্য কোনও অপারেটর গ্রহণ করে এখন ব্যাপক উন্নতি হয়েছে। এর অর্থ আপনি এখন আরও বেশি বাইট সংরক্ষণ করতে পারেন। নেস্টেড তালিকায় অপারেটরকে ম্যাপিং করা এখন আরও খাটো হয়ে গেছে:
{:x}%
{x}f%
::x
যদিও নেস্টেড তালিকায় ম্যাপিং ব্লকগুলিতে এটি সত্যই সহায়তা করে না।
কার্টেসিয়ান পণ্যগুলিতে প্রয়োগকারী ব্লক বা অপারেটরগুলির ক্ষেত্রে, ব্লকগুলির পাশাপাশি অপারেটরগুলির জন্য এটি এখন আরও সংক্ষিপ্ত হয়ে উঠেছে:
5,_f{f{...}}
5,_ff{...}
5,_f{fx}
5,_ffx
কি সুন্দর আপনি এখন এই বাসা করতে পারেন। সুতরাং আপনি কোনও তালিকার নীচে তৃতীয় স্তরে ঠিক তত সহজে অপারেটর প্রয়োগ করতে পারেন:
:::x
বা কিছু কৌশল সহ একটি ব্লক:
{...}ff%