আমি এমএল বংশবৃত্তের একটি অভিব্যক্তি ভিত্তিক ভাষা নিয়ে কাজ করছি, সুতরাং এটির স্বাভাবিকভাবে টাইপ অনুক্রমের প্রয়োজন> :)
এখন, আমি ইওপিএল (ফ্রেডম্যান এবং ওয়ান্ড) এ সাধারণ প্রয়োগের উপর ভিত্তি করে অনুমানমূলক প্রকারের সমস্যাগুলির প্রতিবন্ধকতা ভিত্তিক সমাধানটি প্রসারিত করার চেষ্টা করছি, তবে তারা মার্জিতভাবে পার্শ্ব-ধাপ বীজগণিত ডেটাটাইপগুলি।
আমার এখন পর্যন্ত যা আছে তা সহজেই কাজ করে; একটি অভিব্যক্তি যদি e
হয় a + b
, e : Int
, a : Int
এবং b : Int
। যদি e
ম্যাচ হয়,
match n with
| 0 -> 1
| n' -> n' * fac(n - 1)`,
আমি ন্যায়ত যে আবিষ্কার করতে পারেন t(e) = t(the whole match expression)
, t(n) = t(0) = t(n')
, t(match) = t(1) = t(n' * fac(n - 1)
ইত্যাদি ...
বীজগণিতের ডেটাটাইপগুলির ক্ষেত্রে আমি খুব অনিশ্চিত। ধরুন ফিল্টারের মতো কোনও ফাংশন:
let filter pred list =
match list with
| Empty -> Empty
| Cons(e, ls') when pred e -> Cons (e, filter ls')
| Cons(_, ls') -> filter
তালিকার ধরণটি বহুমুখী থেকে যায়, কনসের ধরণের হওয়া দরকার a * a list -> a list
। সুতরাং, এই সীমাবদ্ধতা প্রতিষ্ঠায় আমি স্পষ্টত আমার বীজগাণিতিক কনস্ট্রাকটর এই ধরনের সন্ধান করার প্রয়োজন - সমস্যা আমি এখন আছে বীজগাণিতিক কনস্ট্রাকটর একাধিক ব্যবহার সম্পর্কে 'প্রসঙ্গ-সংবেদনশীলতা' হল - কিভাবে আমি আমার বাধ্যতা সমীকরণ প্রকাশ করেন যে a
এ প্রতিটি ক্ষেত্রে একই হওয়া দরকার?
এর সাধারণ সমাধান খুঁজতে আমার সমস্যা হচ্ছে এবং আমি এ বিষয়ে তেমন সাহিত্য খুঁজে পাচ্ছি না। যখনই আমি অনুরূপ কিছু খুঁজে পাই - বাধা-ভিত্তিক ধরণের অনুমিতি সহ অভিব্যক্তিভিত্তিক ভাষা - এগুলি বীজগণিতের ডেটাটাইপগুলি এবং পলিমারফিজমের সংক্ষিপ্ততা বন্ধ করে দেয়।
কোন ইনপুট অনেক প্রশংসা করা হয়!