শেখার সময় আমার এই প্রশ্নটি অনেক ছিল এবং তখন থেকে এটি বহুবার জিজ্ঞাসা করা হয়েছিল। আমি পার্থক্যটি বর্ণনা করার সবচেয়ে সহজ উপায়টি হ'ল উভয়ই এক রকম :) আমাকে ব্যাখ্যা করতে দাও ... স্পষ্টতই পার্থক্য রয়েছে।
আংশিক প্রয়োগ এবং তরকারী উভয়ই কোনও ফাংশনে যুক্তি সরবরাহ করা জড়িত, সম্ভবত একবারে নয়। মোটামুটি ক্যানোনিকাল উদাহরণটি দুটি সংখ্যা যুক্ত করছে। সিউডোকোডে (আসলে কীওয়ার্ড ছাড়াই জেএস), বেস ফাংশনটি নিম্নলিখিত হতে পারে:
add = (x, y) => x + y
যদি আমি একটি "অ্যাডঅন" ফাংশন চাইতাম, তবে আমি আংশিকভাবে এটি প্রয়োগ করতে পারি বা এটি কারি করতাম:
addOneC = curry(add, 1)
addOneP = partial(add, 1)
এখন তাদের ব্যবহার স্পষ্ট:
addOneC(2) #=> 3
addOneP(2) #=> 3
তাহলে পার্থক্য কী? ঠিক আছে, এটি সূক্ষ্ম, তবে আংশিক প্রয়োগের সাথে কিছু যুক্তি সরবরাহ করা জরুরী এবং ফিরে ফাংশনটি পরবর্তী অনুরোধের পরে মূল ফাংশনটি সম্পাদন করবে যেখানে কারি করানো সমস্ত আর্গুমেন্ট প্রয়োজনীয় না হওয়া পর্যন্ত অপেক্ষা করতে থাকবে:
curriedAdd = curry(add) # notice, no args are provided
addOne = curriedAdd(1) # returns a function that can be used to provide the last argument
addOne(2) #=> returns 3, as we want
partialAdd = partial(add) # no args provided, but this still returns a function
addOne = partialAdd(1) # oops! can only use a partially applied function once, so now we're trying to add one to an undefined value (no second argument), and we get an error
সংক্ষেপে, কিছু মান প্রিফিল করতে আংশিক অ্যাপ্লিকেশনটি ব্যবহার করে জেনে থাকুন যে আপনি পরের বার পদ্ধতিটি কল করবেন তখন এটি কার্যকর হবে এবং সমস্ত অনির্ধারিত যুক্তি রেখে যাবে; কার্যাঙ্কিং ব্যবহার করুন যখন আপনি ক্রমাগত আংশিক প্রয়োগকৃত ক্রিয়াকলাপটি ফাংশনের স্বাক্ষর পূরণের জন্য যতবার প্রয়োজন ততবার ফিরিয়ে দিতে চান। একটি চূড়ান্ত স্বীকৃত উদাহরণ:
curriedAdd = curry(add)
curriedAdd()()()()()(1)(2) # ugly and dumb, but it works
partialAdd = partial(add)
partialAdd()()()()()(1)(2) # second invocation of those 7 calls fires it off with undefined parameters
আশাকরি এটা সাহায্য করবে!
আপডেট: কিছু ভাষা বা লিবি বাস্তবায়ন আপনাকে আংশিক প্রয়োগের বাস্তবায়নের (চূড়ান্ত মূল্যায়নের মোট যুক্তিগুলির সংখ্যা) পাস করার অনুমতি দেবে যা আমার দুটি বিবরণকে একটি বিভ্রান্তিকর গোলযোগের সাথে আবদ্ধ করতে পারে ... তবে এই মুহূর্তে দুটি কৌশল হ'ল মূলত বিনিময়যোগ্য