এডিটি, জিএডিটি এবং প্রেরণামূলক ধরণের মধ্যে পার্থক্য কী?


21

যে কেউ এর মধ্যে পার্থক্যটি ব্যাখ্যা করতে সক্ষম হতে পারে:

  • বীজগণিত ডেটাটাইপস (যার সাথে আমি মোটামুটি পরিচিত)
  • জেনারালাইজড বীজগণিত ডেটাটাইপগুলি (কীসের ফলে তাদের সাধারণীকরণ করা হয়?)
  • প্ররোচনামূলক প্রকার (যেমন কোক)

(বিশেষত প্রেরণামূলক প্রকারের।) আপনাকে ধন্যবাদ।

উত্তর:


21

বীজগণিত সংক্রান্ত ডেটা টাইপ আপনাকে পুনরাবৃত্তভাবে প্রকারগুলি সংজ্ঞায়িত করতে দেয়। কংক্রিটলি, ধরুন আমাদের কাছে ডেটাটাইপ রয়েছে

datalist=Nil|ConsofN×list

এর অর্থ কী হ'ল এবং । অপারেটরদের দ্বারা তৈরি সবচেয়ে ছোট সেট । অপারেটর সংজ্ঞায়নের মাধ্যমে আমরা এটিকে আনুষ্ঠানিক করতে পারিN I l C o n s F ( X )listNilConsF(X)

F(X)=={Nil}{Cons(n,x)|nNxX}

এবং তারপরে হিসাবে সংজ্ঞাlist

list=iNFi()

একজন সাধারণ এডিটি যখন একটি টাইপ সংজ্ঞায়িত কি আমরা পেতে অপারেটর যাও recursively। উদাহরণস্বরূপ, আমরা নিম্নলিখিত ধরণের নির্মাণকারীর সংজ্ঞা দিতে পারি:

busha=Leafofa|Nestofbush(a×a)

এই ধরনের উপায়ে একটি উপাদান যে একটি tuple হয় দৈর্ঘ্য গুলি কিছু , প্রতিটি সময় যেহেতু আমরা ঢোকা কন্সট্রাকটর টাইপ যুক্তি নিজেই ছবিতে । সুতরাং আমরা অপারেটরটিকে সংজ্ঞায়িত করতে পারি যে আমরা এর একটি নির্দিষ্ট পয়েন্ট নিতে চাই:a 2 n n N e s tbushaa2nnNest

F(R)=λX.{Leaf(x)|xX}{Nest(v)|vR(X)}

কাক-এ একটি ইন্ডাকটিভ টাইপ মূলত একটি জিএডিডি হয়, যেখানে টাইপ অপারেটরের সূচকগুলি অন্য ধরণের মধ্যে সীমাবদ্ধ নয় (যেমন, উদাহরণস্বরূপ, হাস্কেল), তবে টাইপ তত্ত্বের মানগুলি দ্বারাও সূচকযুক্ত হতে পারে । এটি আপনাকে দৈর্ঘ্য-সূচিকৃত তালিকার জন্য ধরণের দেয় এবং আরও অনেক কিছু।


1
ধন্যবাদ. তবে, তার অর্থ কি কেবল "নির্ভরশীল প্রকার" এর সাথে সম্পূর্ণ সমার্থক সেই "ইন্ডাকটিভ টাইপ" নয়?
নিনজাগেকো

4
@ নীল: আমি bushজিএডিডি নামক ধরণগুলি কখনও দেখিনি । আমি তাদের নেস্টেড বা অ-নিয়মিত ধরণের নামে দেখেছি।
jbapple

3
নেস্টেড টাইপগুলি জিএডিডি-র একটি বিশেষ কেস। একটি জিএডিডি সমালোচনামূলক বৈশিষ্ট্যটি হ'ল এটি উচ্চতর ধরণের একটি পুনরাবৃত্ত সংজ্ঞা। (আরএইচএসের পরিবর্তনগুলি মূলত কন্সট্রাক্টরের উপাদান হিসাবে একটি ধরণের সাম্য যোগ করার জন্য সিনট্যাকটিক চিনি))
নীল কৃষ্ণস্বামী

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

2
@ নীলকৃষ্ণস্বামী: আপনি কি ধরণের ধরণের "প্রথম কয়েকটি ক্ষুদ্রতম" উপাদানগুলি গণনা করে নিজের উত্তরটি পরিষ্কার করতে এত दयाশীল হবেন bush a? এই উদাহরণে, এটি Nest Leaf(a) Leaf(a) Leaf(a) Leaf(a), বা Nest ((Nest Leaf(a) Leaf(a)) (Nest Leaf(a) Leaf(a)))সেট একটি উদাহরণ হিসাবে?
নিনজাগেকো

19

বীজগণিতের ডেটাটাইপগুলি বিবেচনা করুন যেমন:

data List a = Nil | Cons a (List a)

ডেটাটাইপে প্রতিটি কনস্ট্রাক্টরের রিটার্নের ধরণগুলি একই রকম: Nilএবং Consউভয়ই প্রত্যাবর্তন করে List a। আমরা যদি কনস্ট্রাক্টরকে বিভিন্ন ধরণের ফেরত দেওয়ার অনুমতি দিই, আমাদের একটি জিএডিডি রয়েছে :

data Empty -- this is an empty data declaration; Empty has no constructors
data NonEmpty

data NullableList a t where
    Vacant :: NullableList a Empty
    Occupied :: a -> NullableList a b -> NullableList a NonEmpty

Occupiedটাইপ আছে a -> NullableList a b -> NullableList a NonEmpty, যখন Consটাইপ আছে a -> List a -> List a। এটি লক্ষ্য করা গুরুত্বপূর্ণ যে NonEmptyএটি একটি প্রকার, একটি শব্দ নয়। আরেকটি উদাহরণ:

data Zero
data Succ n

data SizedList a t where
    Alone :: SizedList a Zero
    WithFriends :: a -> SizedList a n -> SizedList a (Succ n)

নির্ভরযোগ্য প্রকারযুক্ত প্রোগ্রামিং ভাষাগুলিতে সূচকীয় প্রকারগুলি কনস্ট্রাক্টরের রিটার্ন ধরণের আর্গুমেন্টের মানগুলিতে (কেবল ধরণের নয়) নির্ভর করতে দেয়।

Inductive Parity := Even | Odd.

Definition flipParity (x:Parity) : Parity :=
  match x with
    | Even => Odd
    | Odd => Even
  end.

Fixpoint getParity (x:nat) : Parity :=
  match x with
    | 0 => Even
    | S n => flipParity (getParity n)
  end.

(*
A ParityNatList (Some P) is a list in which each member
is a natural number with parity P.
*)

Inductive ParityNatList : option Parity -> Type :=
  Nil : forall P, ParityNatList P
| Cons : forall (x:nat) (P:option Parity), 
  ParityNatList P -> ParityNatList 
  (match P, getParity x with
     | Some Even, Even => Some Even
     | Some Odd, Odd => Some Odd
     | _, _ => None
   end).

একটি পার্শ্ব নোট: জিএইচসিতে মান নির্মাতাদের টাইপ কনস্ট্রাক্টর হিসাবে চিকিত্সার জন্য একটি ব্যবস্থা রয়েছে । এটি কাকের মতো নির্ভরশীল ইন্ডাকটিভ টাইপের মতো নয়, তবে এটি জিএডিডিগুলির সিনট্যাকটিক বোঝা কিছুটা কমিয়ে দেয় এবং এটি আরও ভাল ত্রুটির বার্তা নিয়ে যেতে পারে।


ধন্যবাদ. "প্রোগ্রামিং ভাষাগুলিতে নির্ভরশীল প্রকারগুলির মধ্যে প্রেরণামূলক প্রকারগুলি" তখন কোনও ইন্ডাকটিভ টাইপ কোনও নির্ভরশীল প্রকারবিহীন ভাষায় দেখতে কেমন লাগে এবং আপনার কি অ-প্ররোচক (তবে জিএডিডি-জাতীয়) নির্ভর প্রকার থাকতে পারে?
নিনজাগেকো
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.