গোলং / হাস্কেলতে অনুক্রমটি টাইপ করুন


9

আমি পড়েছি যে এমএল বা হাস্কেলের মতো কার্যকরী ভাষাগুলির অর্থে গোয়ের সত্যিকারের অনুমান নেই তবে আমি দুটি সংস্করণের তুলনা বুঝতে কোনও সহজ খুঁজে পাইনি। কেউ কি বেসিক পদগুলিতে ব্যাখ্যা করতে পারেন যে কীভাবে গোতে টাইপ অনুকরণটি হাস্কেলের টাইপ অনুক্রমের থেকে পৃথক এবং প্রতিটিের পক্ষে / কৌশলগুলি থেকে আলাদা?

উত্তর:


13

গোয়ের ধরণের অনুমিতি সম্পর্কিত এই স্ট্যাকওভারফ্লো উত্তরটি দেখুন । আমি গো সাথে পরিচিত নই তবে এই উত্তরের উপর ভিত্তি করে মনে হচ্ছে এটি একমুখী "টাইপ ছাড়" (কিছু সি ++ টেমিনোলজি ধার করা)। এর অর্থ হ'ল যদি আপনার:

x := y + z

তারপরে ধরণের প্রকারটি xবের করে নির্ধারণ করা হয় যা সংকলকটির y + zজন্য অপেক্ষাকৃত তুচ্ছ জিনিস। এটি করার জন্য, প্রকারগুলির প্রকারগুলি yএবং পূর্বরূপগুলিz জানা দরকার : এটি টাইপ টিকাশির মাধ্যমে করা যেতে পারে বা তাদের অর্পণ করা আক্ষরিক থেকে অনুমান করা যায়।


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

let x = y + z

তারপরে হাস্কেল প্রকারটি কেবলমাত্র xনয় কেবল yএবং zকেবল তাদের ভিত্তিতে আপনি অতিরিক্ত সম্পাদন করছেন তার উপর ভিত্তি করে অনুমান করতে পারে । এক্ষেত্রে:

x :: Num a => a
y :: Num a => a
z :: Num a => a

(ছোট হাতের aএখানে একটি উল্লেখ করে বহুরুপী টাইপ প্রায়ই বলা হয় "জেনেরিক্স" সি মত অন্যান্য ভাষায় ++,। Num a =>অংশ হল বাধ্যতা নির্দেশ করে টাইপ aসমর্থন উপরন্তু কিছু ধারণা আছে।)

এখানে আরও আকর্ষণীয় উদাহরণ: নির্দিষ্ট পয়েন্ট সংযোজক যা কোনও পুনরাবৃত্ত ফাংশন সংজ্ঞায়িত করতে দেয়:

let fix f = f (fix f)

লক্ষ্য করুন যে কোথাও আমরা প্রকারটি নির্দিষ্ট করে নেই f, বা আমরা প্রকারটি নির্দিষ্ট করে নেই fix, তবুও হাস্কেল সংকলক স্বয়ংক্রিয়ভাবে এটি বের করতে পারে:

f :: t -> t
fix :: (t -> t) -> t

এটি বলে যে:

  • প্যারামিটারটি fকিছু স্বেচ্ছাসেবী টাইপ tথেকে একই ধরণের হতে হবে t
  • fixএটি এমন একটি ফাংশন যা টাইপের একটি পরামিতি গ্রহণ করে t -> tএবং টাইপের ফলাফল প্রদান করে t

4
আরো ঠিক, Haskell, যে বলতে পারেন x, y, zএকই Num, এরিক টাইপ কিন্তু এখনও তারা হতে পারে IntegerS, DoubleS, Ratio Integers ... Haskell, সাংখ্যিক ধরনের মধ্যে একটি অবাধ পছন্দ করতে ইচ্ছুক, কিন্তু অন্যান্য typeclasses জন্য নয়।
জন ডিভোরাক

7

গো তে টাইপ অনুক্রমটি অত্যন্ত সীমাবদ্ধ এবং অত্যন্ত সহজ। এটি কেবলমাত্র একটি ভাষা নির্মাণে (ভেরিয়েবল ডিক্লেয়ারেশন) কাজ করে এবং এটি কেবল ডান হাতের প্রকারটি নেয় এবং এটিকে বাম-হাতের পরিবর্তকের জন্য টাইপ হিসাবে ব্যবহার করে।

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

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


4
"হাসকেলে, টাইপ তথ্য পুরো প্রোগ্রামের মাধ্যমে সমস্ত দিক থেকে অবাধে প্রবাহিত হয়": আমি দেখতে পাই এটি একটি খুব ভাল অনুভূতি দেয়। +1
জর্জিও

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