এর ব্যবহার Γ
বিল্ট-ইন-এর প্রধান ব্যবহার Γ
, তালিকাগুলি বা তালিকার ডিকনস্ট্রাকশনগুলির সাথে প্যাটার্ন ম্যাচিং হিসাবে পরিচিত , একটি তালিকাকে একটি মাথা এবং লেজকে বিভক্ত করা এবং তাদের উপর একটি বাইনারি ফাংশন প্রয়োগ করা। এটি হাস্কেল প্যাটার্নের সাথে মিলে যাওয়া আইডিয়মের সাথে মিল রয়েছে
f (x : xs) = <something>
f [] = <something else>
যেখানে <something>
সম্পর্কে একটি অভিব্যক্তি x
, xs
এবং সম্ভবত f
। এখানে 4 টি ওভারলোডিং রয়েছে Γ
যার প্রতিটিতে কিছুটা ভিন্নভাবে কাজ করা হয়।
list
প্রথম ওভারলোডিং, list
একটি মান a
এবং একটি বাইনারি ফাংশন নেয় f
। এটি একটি নতুন ফাংশন ফিরিয়ে দেয় যা একটি তালিকা গ্রহণ করে, a
খালি থাকলে ফিরে আসে এবং f
মাথা এবং লেজকে কল দেয় যদি এটি কিছু না হয়। উদাহরণস্বরূপ, Γ_1€
একটি তালিকা নেয়, -1
এটি খালি হলে প্রত্যাবর্তন করে , এবং পুচ্ছের মধ্যে প্রথম উপাদানটির প্রথম উপস্থিতির সূচক না হলে।
listN
বাদ দেওয়া এবং রিটার্ন টাইপের ডিফল্ট মান পরিবর্তে ব্যবহৃত হয় বাদে দ্বিতীয় ওভারলোডিংয়ের listN
সমান is উদাহরণস্বরূপ, এটির সমতুল্য , যেহেতু ডিফল্ট সংখ্যার মান হয় ।list
a
Γ€
Γ0€
0
অনুশীলনে, এর listN
চেয়ে বেশি ব্যবহৃত হয় list
, যেহেতু ডিফল্ট মান হয় অপ্রাসঙ্গিক বা হুবহু আপনার যা প্রয়োজন। একটি সাধারণ প্যাটার্নটি হল Γ~αβγ
, যেখানে αβγ
তিনটি ফাংশন রয়েছে; β
এটি প্রথম উপাদান এবং γ
লেজের ক্ষেত্রে প্রযোজ্য এবং ফলাফলগুলি একত্রিত করে α
। এটি উত্তর হিসাবে উদাহরণস্বরূপ ব্যবহৃত হয়েছিল । অন্যান্য নিদর্শন অন্তর্ভুক্ত Γo:α
আবেদন করার জন্য α
শুধুমাত্র প্রথম উপাদান, এবং Γ·:mα
আবেদন করার জন্য α
প্রথম ছাড়া সমস্ত উপাদান। উত্তরটি উত্তরটিতে ব্যবহৃত হয়েছিল ।
listF
তৃতীয় ওভারলোডিং কিছুটা বেশি জড়িত। যেমন list
, এটি একটি মান a
এবং একটি ফাংশন নেয় f
এবং একটি নতুন ফাংশন দেয় g
যা একটি তালিকা গ্রহণ করে। যাইহোক, এই সময়টি f
একটি অতিরিক্ত ফাংশন আর্গুমেন্ট গ্রহণ করে, যা g
নিজেই এটি এবং এটি যেকোন মূল্যে কল করতে পারে (ইনপুট তালিকার পুচ্ছ সহ, তবে সীমাবদ্ধ নয়)। এর অর্থ হল তালিকায় listF
একটি সাধারণ পুনরাবৃত্তি স্কিম প্রয়োগ করে।
listF
খুব প্রায়ই ব্যবহার করা হয় না, যেহেতু list
/ এর সাথে স্পষ্ট পুনরাবৃত্তি listN
সাধারণত একই দৈর্ঘ্য বা সংক্ষিপ্ত হয়, যেমন এই উত্তরে ।
listNF
listNF
যা যা listF
তা listN
হ'ল list
: ইনপুট a
বাদ দেওয়া হয় এবং তার পরিবর্তে প্রত্যাবর্তনের ধরণের ডিফল্ট মান ব্যবহৃত হয়। বিরল পরিস্থিতিতে, এটি একটি ডান ভাঁজ থেকে কম হতে পারে, উদাহরণস্বরূপ এই উত্তরে ।
এর পুনরাবৃত্ত সংস্করণগুলির উদাহরণ হিসাবে Γ
, ফাংশনটি Γλ·:o⁰↔
প্রথমে, শেষ, দ্বিতীয়, দ্বিতীয় থেকে শেষ, তৃতীয়, তৃতীয়-থেকে-শেষ, এবং ক্রমের তালিকায় একটি তালিকাটিকে বদলে দেয়।
এটি অনলাইন চেষ্টা করুন!
ফাংশনটি f
হ'ল সুস্পষ্ট ল্যাম্বদা λ·:o⁰↔
, যার যুক্তি ⁰
পুরো ফাংশন। কি f
করে সঙ্গে লেজ বিপরীত হয় ↔
, তবে প্রধান ফাংশন সঙ্গে যাও recursively কল o⁰
, এবং পরিশেষে সঙ্গে মাথা পিছনে কর্মপ্রণালী ·:
। অবশ্যই, Γ·:o₀↔
এটি একটি বাইট সংক্ষিপ্ত, তবে লাইনে এই ফাংশনটি ছাড়া অন্য কিছু রয়েছে তবে কাজ করে না।