একটি ফাংশন হচ্ছে চ যে আর্গুমেন্ট লাগে এক্স 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
।