একটি ফাংশন হচ্ছে চ যে আর্গুমেন্ট লাগে এক্স 1 , x 2 , ..., x এর এন
- যেমন। চ: এক্স 1 × এক্স 2 ×… × এক্স এন → ওয়াই
- সংবাহন redefines চ একটি ফাংশন হিসাবে একটি একক যুক্তি গ্রহণ একটি 1 যা এখনও অন্য ফাংশন মানচিত্র তৈরী করে। এই কৌশলটি আংশিক প্রয়োগের জন্য দরকারী, উদাহরণস্বরূপ কোনও ত্রিযুক্ত powফাংশন সহ আমরা লিখতে পারি exp = pow(e)।
উদাহরণ
ধরে নেওয়া যাক আমরা নিম্নলিখিত কার্যকারিতা থাকতে চ তিন আর্গুমেন্ট গ্রহণ ( চ: এক্স 1 × এক্স 2 × এক্স 3 → ওয়াই ):
def f(a,b,c):
return a + b * c
এই ফাংশনটি তৈরি করা আমাদের f_curry সহ ছেড়ে দেয় : এক্স 1 → (এক্স 2 → (এক্স 3 → ওয়াই)) , যদি আমরা এখন আবার সেই ফাংশনটির সাথে দু'বার কল করি তবে নীচের রিটার্নের সমতুল্য f_curry(1)(2)একটি ফাংশন ( h) পাব :
def h(c):
return 1 + 2 * c
কার্ড ফাংশনটি fএভাবে লেখা যেতে পারে (পাইথন 3):
def f_curry(a):
def g_curry(b):
def h(c):
return a + b * c
return h
return g_curry
চ্যালেঞ্জ
আপনার চ্যালেঞ্জটি হ'ল উপরে বর্ণিত কোনও ফাংশনটি কারি করা, এখানে বিধিগুলি দেওয়া হল:
- ইনপুট একটি ব্ল্যাকবক্স ফাংশন হবে যা কমপক্ষে 2 টি আর্গুমেন্ট নেয়
- ইনপুট
printfফাংশনটিতে সর্বদা একটি নির্দিষ্ট সংখ্যক আর্গুমেন্ট থাকবে (বিপরীত বা অনুরূপ, দ্রষ্টব্য: আপনাকে কোনও সংখ্যা ments2 দিয়ে আটকানো ফাংশন সমর্থন করতে হবে) - যদি আপনার ভাষাটি ডিফল্টরূপে কারিড ফাংশনগুলি ব্যবহার করে (উদাঃ হাস্কেল), আপনি ইনপুট ফাংশনটিকে "উচ্চ-অর্ডার ফাংশন" এর পরিবর্তে এন- টিপলসগুলিতে সংজ্ঞায়িত করার প্রত্যাশা করতে পারেন
- আপনি ইনপুট হিসাবে আর্গুমেন্টের সংখ্যা নিতে পারেন
- আউটপুট ইনপুট এর তরকারি সমতুল্য হবে *
- আপনি ধরে নিতে পারেন আউটপুট ফাংশনটি কেবল সর্বদা থাকবে:
- ইনপুট ফাংশনটি নেয় এমন আর্গুমেন্টের সংখ্যার কম বা সমান সাথে ডাকা হয়
- সঠিক ধরণের আর্গুমেন্টের সাথে ডাকা হয়
* এর অর্থ হবে যুক্তিগুলির fসাথে একটি ইনপুট Nএবং আউটপুট hযা সমস্ত বৈধ আর্গুমেন্টের জন্য a1,…,aNএটি ধারণ করে f(a1,a2,…,aN) == h(a1)(a2)…(aN)।
def f(a,b,c): return a + b * cএবং আউটপুট def f_curry(a): def g_curry(b): def h(c): return a + b * c return h return g_curry?
f(যা কোথাও সংজ্ঞায়িত হয়েছে) এবং আউটপুটটির সমতুল্য কিছু হওয়া উচিত f_curry। অথবা ইনপুট হবে lambda a,b,c: a+b*cএবং আউটপুট সমান একটি ফাংশন f_curry।