একটি জেনেরিক সমাধান হ'ল নতুন ধরণের প্রবর্তন। এটি আরও জড়িত থাকতে পারে তবে এর নিজস্ব ধরণের সংজ্ঞা না দেয় এমন কোনও ধরণের জন্য কাজ করার সুবিধা রয়েছে।
যদি Tএমন কোনও প্রকার হয় যার lteqজন্য সংজ্ঞায়িত করা হয় তবে আপনি এরকম কিছু InfiniteOr<T>দিয়ে সংজ্ঞা দিতে পারেন lteq:
class InfiniteOr with type parameter T:
field the_T of type null-or-an-actual-T
isInfinite()
return this.the_T == null
getFinite():
assert(!isInfinite());
return this.the_T
lteq(that)
if that.isInfinite()
return true
if this.isInfinite()
return false
return this.getFinite().lteq(that.getFinite())
আমি এটি যথাযথ জাভা সিনট্যাক্সে অনুবাদ করতে আপনার কাছে রেখে দেব। আমি আশা করি ধারণাগুলি পরিষ্কার হয়েছে; তবে আমাকে যেভাবেই হোক সেগুলি বানান করতে দিন।
ধারণাটি হ'ল একটি নতুন ধরণের তৈরি করা যা ইতিমধ্যে কিছু বিদ্যমান ধরণের মতো একই মান রয়েছে, আরও একটি বিশেষ মান যা আপনি সর্বজনীন পদ্ধতির মাধ্যমে বলতে পারবেন - আপনি যেভাবে অনন্তকে অভিনয় করতে চান ঠিক তেমন কাজ করে, উদাহরণস্বরূপ এটি এর চেয়েও বড় আর কিছু. আমি nullএখানে অসীম প্রতিনিধিত্ব করতে ব্যবহার করছি , যেহেতু এটি জাভাতে সবচেয়ে সোজা মনে হয়।
আপনি যদি গাণিতিক ক্রিয়াকলাপগুলি যুক্ত করতে চান তবে তাদের কী করা উচিত তা সিদ্ধান্ত নিন, তারপরে এটি বাস্তবায়ন করুন। আপনি যদি অসীম কেসগুলি প্রথমে পরিচালনা করেন তবে এটি সম্ভবত সবচেয়ে সহজ তবে মূল ধরণের সীমাবদ্ধ মানগুলির উপর বিদ্যমান ক্রিয়াকলাপগুলি পুনরায় ব্যবহার করুন।
ডান হাতের পাশের অসম্পূর্ণতাগুলির বিপরীতে বা তদ্বিপরীত হওয়ার আগে বাম-হাতের অসম্পূর্ণতাগুলি পরিচালনা করার একটি কনভেনশন গ্রহণ করা সুবিধাজনক হবে বা নাও হতে পারে; আমি এটি চেষ্টা না করে বলতে পারি না, তবে কম বা সম-সমান ( lteq) এর জন্য প্রথমে ডান-হাতের অসীম দিকে তাকানো সহজ বলে মনে করি। আমি নোট করি যে lteqপরিবর্তনমূলক নয় , addএবং এবং mulহয়; সম্ভবত এটি প্রাসঙ্গিক।
দ্রষ্টব্য: অসীম মানগুলিতে কী হওয়া উচিত তার একটি ভাল সংজ্ঞা নিয়ে আসা সর্বদা সহজ নয়। এটি তুলনা, সংযোজন এবং গুণনের জন্য, তবে সম্ভবত বিয়োগফল নয়। এছাড়াও, অসীম কার্ডিনাল এবং অর্ডিনাল সংখ্যার মধ্যে একটি পার্থক্য রয়েছে যা আপনি মনোযোগ দিতে চাইতে পারেন।