আমি কারিরিং এবং বৈকল্পিক ফাংশনগুলি উভয়ই গতিশীল টাইপযুক্ত ফাংশনাল প্রোগ্রামিং ভাষায় উপলব্ধ করার বিষয়ে ভাবছি, তবে আমি যদি অবাক হই তবে তা সম্ভব কিনা।
এখানে কিছু সিউডোকোড রয়েছে:
sum = if @args.empty then 0 else @args.head + sum @args.tail
যা এর সমস্ত যুক্তি যোগ করতে পারে বলে মনে করা হচ্ছে। তারপরে, যদি sum
নিজেই একটি সংখ্যার সাথে চিকিত্সা করা হয়, তবে ফলাফল হয় 0
। উদাহরণ স্বরূপ,
sum + 1
1 এর সমান, ধরে নিলে এটি +
কেবল সংখ্যায় কাজ করতে পারে। যাইহোক, এমনকি sum == 0
সত্য, sum
তবুও তার মান এবং কার্যকরী সম্পত্তি বজায় রাখবে যতক্ষণ না আর্গুমেন্ট দেওয়া হয় (তাই "আংশিকভাবে প্রয়োগ" এবং একই সাথে "ভেরেনডিক" একই সাথে), উদাহরণস্বরূপ, যদি আমি ঘোষণা করি
g = sum 1 2 3
এর g
সমান 6
, তবে আমরা আরও আবেদন করতে পারি g
। উদাহরণস্বরূপ, g 4 5 == 15
সত্য। এই ক্ষেত্রে, আমরা বস্তুটিকে g
আক্ষরিক দ্বারা প্রতিস্থাপন করতে পারি না 6
, যদিও পূর্ণসংখ্যার হিসাবে বিবেচনা করার সময় এগুলি একই মান দেয় তবে তাদের ভিতরে বিভিন্ন কোড থাকে।
যদি এই নকশাটি সত্যিকারের প্রোগ্রামিং ভাষায় ব্যবহৃত হয়, তবে তা কোনও বিভ্রান্তি বা দ্বিধাদ্বন্দ্ব সৃষ্টি করবে?
sum
হয় 0
একটি আর্গুমেন্ট ছাড়া যাও recursively একটি আর্গুমেন্ট নিজেই কল।
reduce
?
args
: empty
, head
, এবং tail
। এগুলি সমস্ত তালিকার ফাংশন, যা সম্ভবতঃ আরও সহজ ও সহজবোধ্য জিনিস হ'ল তালিকা ব্যবহার করা হবে যেখানে ভ্যারিয়েডিক স্টাফগুলি থাকবে suggest (সুতরাং, sum [1, 2, 3]
পরিবর্তে sum 1 2 3
)