এমন কি প্রোগ্রামিং ভাষা রয়েছে যা আপনাকে টাইপগুলিতে গাণিতিক সেট করতে দেয়?


9

কৌতূহলের বাইরে, এমন কোন ভাষা রয়েছে যেগুলি আপনাকে নতুন ধরণের তৈরি করতে টাইপগুলিতে গাণিতিক সেট করতে দেয়? কিছুটা এইরকম:

interface A {
  void a();
  void b();
}

interface B {
  void b();
  void c();
}

interface C = A & B; // has b()
interface D = A | B; // has a(), b() and c()
interface E = (A & B) ^ B; // has c()

আমি জানি যে কয়েকটি ভাষায় এই ধারণাগুলি প্রকাশ করা যেতে পারে (অর্থাত্ জাভা List<Comparable & Serializable>ইন্টারফেসগুলির মিলনের জন্য রয়েছে) তবে আমি এমন ভাষা কখনও শুনিনি যা পাটিগণিত টাইপ সমর্থন করে। ধন্যবাদ!


7
এই জাতীয় ব্যবস্থা কীভাবে কার্যকর হবে?
রবার্ট হার্ভে

4
একটি নমুনা যা আমি অনেকগুলি দেখেছি তা হ'ল একটি ইন্টারফেস যা অন্য দুটি ইন্টারফেসকে প্রসারিত করে এবং কোনও কিছু যুক্ত করে না (যেমন, CanWriteAndCompare extends Serializable, Comparable {}) এবং আমি কীভাবে এটি সাধারণীকরণ করব তা ভাবছিলাম।
হালদেন ব্রাউন

2
এছাড়াও, আমি আজ এমন একটি মামলায় দৌড়েছি যেখানে আমার কাছে এমন পদ্ধতি রয়েছে যা দুটি Aবা Bবাস্তবায়ন একইরকম দেখতে দুটি বাস্তবায়ন সহ গ্রহণ করতে পারে a পদ্ধতিতে আমি একটি পলিমারফিক পদ্ধতিতে কল করছি যা একটি Aবা একটি নিতে পারে B, তাই বাস্তবায়নগুলি একই রকম, তবে যেহেতু আমাকে দুটি স্বতন্ত্র ধরণের নিতে হবে আমার দুটি বাস্তবায়ন প্রয়োজন। আমি করতে পারলে এটি আরও সহজ হত myMethod(A | B aOrB)
হালদেন ব্রাউন


1
Orঅপারেশন একাধিক উত্তরাধিকার দ্বারা অনুকরণ করা যেতে পারে।
ব্যবহারকারী

উত্তর:


4

ট্যানজেন্ট ( 0.3 স্পেক ) এর সাথে সদৃশ কিছু ব্যবহার করে। (অস্বীকৃতি: এটি আমার নিজের ছোট গবেষণা প্রকল্প)

বর্তমানে withইউনিয়ন অপারেটরদের মডেলিং উত্তরাধিকার হিসাবে কাজ করে, যদিও বাস্তববাদ এটিকে চলাচল করে না। একবার আপনি প্রয়োগগুলির সাথে প্রয়োগগুলি পরিচয় করিয়ে দিলে, একই নামের সাথে পদ্ধতিগুলির একটি কঠোর ইউনিয়ন প্রায়শই আপনি যা চান তা না হয় এবং যাইহোক সঠিকভাবে করা অসম্ভব।

intersectসমর্থিত যে মডেলগুলি foo(T,T)প্যারামিটারগুলি আলাদা যেখানে এমন কিছুর জন্য অনুক্রম টাইপ করে ।

পরিপূরকগুলি আকর্ষণীয় ছিল, তবে আংশিক প্রকারের দিকে পরিচালিত হয়েছিল যা সঠিকভাবে অন্তর্ভুক্ত করার পক্ষে তেমন দরকারী এবং / অথবা ঝামেলাজনক বলে মনে হয়নি - সুতরাং এতে অন্তর্ভুক্ত করা হয়নি।

আমি জানি যে আমি চালিয়েছি এমন আরও কয়েকটি গবেষণা ভাষা রয়েছে যা কিছু মিল ছিল তবে এই মুহুর্তে সেগুলি মনে করতে পারি না। মূল সমস্যাটি হ'ল স্ট্রাকচারাল টাইপিং ব্যতীত জিনিসগুলি সত্যই কার্যকর হয় না, যা ভয়ানক জনপ্রিয় নয়। অন্যটি হ'ল আপনার তৈরির ধরণের সঞ্চয় করতে কিছু প্রকারের (ধরণের প্রকারের) প্রয়োজন, অন্যথায় এটি কেবল এমন কোনও কিছুর জন্য শর্টহ্যান্ড যা সেই ক্ষমতা ব্যতীত বিশেষভাবে মূর্খ নয়। এমনকি এটি স্ট্রাকচারাল টাইপিংয়ের চেয়ে অনেক কম সাধারণ।

এটি পক্ষপাতদুষ্ট, এবং এটি খুব বেশি নয়, তবে এটি রয়েছে।


5

হ্যাঁ, সিলোন হ'ল অ্যাডহক ইউনিয়ন এবং ছেদ করার ধরণের একটি ভাষা, যা সিলোন সফর থেকে এই অধ্যায়ে বর্ণিত হয়েছে:

http://ceylon-lang.org/documentation/1.0/tour/types/

এটি থেকে আপনি যে কুল্কের প্রতিভা পেয়েছেন তা আশ্চর্যজনক। এখানে আমি সম্প্রতি একটি আকর্ষণীয় উদাহরণ ব্লগ করেছি । এবং এখানে একটি সংক্ষিপ্ত উপস্থাপনা রয়েছে যেখানে আমি বেশ কয়েকটি সহজ প্রতিচ্ছবি নিয়ে দ্রুত গ্লস করি

আরও ভাল, ইউনিয়ন / ছেদকেন্দ্রগুলি হ'ল "নিখোঁজ লিঙ্ক" যা জেনেরিক ধরণের যুক্তি অনুমানটি সত্যই সঠিকভাবে সিলেনে সঠিকভাবে কাজ করে যা অন্য ভাষার সাথে সাব টাইপ এবং প্যারামেট্রিক পলিমারফিজমকে একত্রিত করে to

নোট করুন যে এই ধরণের "টাইপ পাটিগণিত" এর সীমাবদ্ধতা রয়েছে, যেমন আপনি এটি বর্ণনা করেছেন। উদাহরণস্বরূপ, আপনি টাইপ স্তরে কোনও সেট পরিপূরক অপারেটর রাখতে পারবেন না, কমপক্ষে সিদ্ধান্তহীনতার পরিচয় না দিয়ে নয়।

আছে HTH


3

স্কালা এটিকে আংশিকভাবে সমর্থন করে (ছেদগুলি তবে ইউনিয়ন নয়), এবং কাঠামোগত সাব-টাইপিংয়ের সাথে যে কোনও ভাষা (আমি মনে করি ওক্যামাল একটি উদাহরণ) বা এমন এক ধরণের সিস্টেমের অনুকরণ করতে যথেষ্ট শক্তিশালী যে (হাস্কেল একটি ক্লাসিক একটি) পূর্ণ "টাইপ-হিসাবে-সেট থাকবে "ক্ষমতা, কমপক্ষে তার ধরণের সিস্টেমের খণ্ডের মধ্যে যা এই জাতীয় জিনিস গ্রহণ করে (প্রাসঙ্গিক যখন এটি এলএইচএললিস্ট / ওওহ্যাস্কেল অনুকরণ করা হয়)।

যেহেতু আমি ওক্যামলকে খুব ভাল জানি না, তাই আমি আপনার উদাহরণের অংশটি দেব যা স্কালায় কাজ করে:

trait A {
  def a(): Unit
  def b(): Unit
}

abstract class B { // just to prove it works with both traits and classes
  def b(): Unit
  def c(): Unit
}

type C = A with B
type D = { def b(): Unit } // not an exact translation, because unions aren't directly available
// type `E` is unrepresentable

হাস্কেলের জন্য একটি সংস্করণ আপনি যে রেকর্ড সিস্টেমটি ব্যবহার করছেন তার উপর নির্ভর করবে এবং সম্ভবত কিছুটা আড়ষ্ট হবে কারণ এটি স্থানীয়ভাবে সমর্থিত না হয়ে অনুকরণীয় হবে।

যতদূর আমি জানি, সিলোন দুটি ছেদ এবং ইউনিয়ন উভয়ই সম্পূর্ণ শক্তিতে ভাষাতে তৈরি করেছে, সুতরাং আপনি সেগুলির ক্ষেত্রে কোনও ধরণের "xor" টাইপ এনকোড করতে পারেন।


1

জাভা কিছু প্রসঙ্গে ইন্টারফেসের ধরণের ছেদগুলিকে সমর্থন করে, যদিও এটি এখন পর্যন্ত বলা যায় না ছেদ ধরণের ভেরিয়েবল তৈরির অনুমতি দেয়। ছেদ করার ধরণগুলি খেলায় আসতে পারে, উদাহরণস্বরূপ, ? :অপারেটরটি ব্যবহার করার সময় । যদি অপারেটরের দ্বিতীয় এবং তৃতীয় অপারেন্ডগুলি সম্পর্কযুক্ত ইন্টারফেসগুলি হয় যা ইন্টারফেসের ওভারল্যাপিং সেট থেকে উত্তরাধিকারী হয়, অপারেটরের ফলাফল ইন্টারফেসের সেট হবে যা উভয়ের পক্ষে সাধারণ।


আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.