কোক কেন তার মূল ভাষায় লেট-এক্সপ্রেশনগুলি অন্তর্ভুক্ত করে


9

কোক এর মূল ভাষায় লেট-এক্সপ্রেশন অন্তর্ভুক্ত করে। আমরা এর মতো অ্যাপ্লিকেশনগুলিতে লেট-এক্সপ্রেশনগুলি অনুবাদ করতে পারি: let x : t = v in b ~> (\(x:t). b) v আমি বুঝতে পারি যে এটি সর্বদা কাজ করে না কারণ vটাইপচিচিংয়ের সময় মানটি পাওয়া যায় না b। তবে এটি সহজেই ফর্মের অ্যাপ্লিকেশনগুলির টাইপেকেকিং কেসিংয়ের মাধ্যমে ঠিক করা যেতে পারে (\(x:t). b) v। এটি আমাদের টাইপচেকিংয়ের সময় একটি বিশেষ কেস ব্যয়ে লেট-এক্সপ্রেশনগুলি সরাতে দেয়। কোক এখনও লেট-এক্সপ্রেশন অন্তর্ভুক্ত করে? তাদের কি অন্যান্য সুবিধাগুলি রয়েছে (বিশেষ ক্ষেত্রে প্রয়োজনের প্রয়োজন ছাড়াও)?


4
আপনার পরামর্শটি মত letপ্রকাশের প্রয়োজন এড়াতে একটি হ্যাক যুক্ত করার মতো মনে হচ্ছে , তবে এর একটি) letভাব প্রকাশ এড়ানোর কোনও কারণ নেই এবং সেগুলি সুবিধাজনকও রয়েছে, এবং খ) আপনার মূল ভাষায় হ্যাক যুক্ত করা কোনও দুর্দান্ত ধারণা নয়।
ডেরেক এলকিন্স

উত্তর:


23

এটি একটি সাধারণ ভুল ধারণা যা আমরা letঅ্যাপ্লিকেশনগুলিতে এক্সপ্রেসশনগুলি অনুবাদ করতে পারি । মধ্যে পার্থক্য let x : t := b in vএবং (fun x : t => v) bযে হয় letএর -expression সময় টাইপ-পরীক্ষণের vআমরা জানি যে xসমান b, কিন্তু আবেদন আমরা করবেন না (subexpression fun x : t => vতার নিজের উপর জানার জন্য আছে)।

এখানে একটি উদাহরণ:

(* Dependent type of vectors. *)
Inductive Vector {A : Type} : nat -> Type :=
  | nil : Vector 0
  | cons : forall n, A -> Vector n -> Vector (S n).

(* This works. *)
Check (let n := 0 in cons n 42 nil).

(* This fails. *)
Check ((fun (n : nat) => cons n 42 nil) 0).

অ্যাপ্লিকেশনটিকে (fun x : t => v) bএকটি বিশেষ ক্ষেত্রে করার জন্য আপনার পরামর্শটি বাস্তবে কার্যকর হয় না। আসুন আমরা এটি সম্পর্কে আরও সাবধানে চিন্তা করি।

উদাহরণস্বরূপ, উপরের উদাহরণটি চালিয়ে আপনি কীভাবে এটি মোকাবেলা করবেন?

Definition a := (fun (n : nat) => cons n 42 nil).
Check a 0.

সম্ভবত এটি কাজ করবে না কারণ aটাইপ করা যায় না, তবে আমরা যদি এর সংজ্ঞাটি প্রকাশ করি তবে আমরা একটি ভাল-টাইপযুক্ত অভিব্যক্তি পাই। আপনি কি মনে করেন ব্যবহারকারীরা আমাদের ভালবাসেন, বা আমাদের নকশার সিদ্ধান্তের জন্য আমাদের ঘৃণা করবেন?

"বিশেষ কেস" হওয়ার অর্থ কী তা আপনার মনোযোগ সহকারে চিন্তা করতে হবে। আমার যদি কোনও অ্যাপ্লিকেশন থাকে তবে আমি decide অবস্ট্রাকশন কিনা তা সিদ্ধান্ত নেওয়ার আগে আমার কি e₁ e₂স্বাভাবিক হওয়া উচিত ? যদি হ্যাঁ, এর অর্থ আমি খারাপ-টাইপযুক্ত ভাবগুলি স্বাভাবিক করব এবং সেগুলি চক্র হতে পারে। যদি না হয়, আপনার প্রস্তাবের ব্যবহারযোগ্যতা সন্দেহজনক বলে মনে হচ্ছে।e₁λ

আপনি মৌলিক উপপাদ্যটিও ভেঙে ফেলবেন যা বলে যে একটি ভাল-টাইপযুক্ত এক্সপ্রেশনটির প্রতিটি উপ-এক্সপ্রেশনটি ভাল-টাইপযুক্ত। এটি nullজাভা প্রবর্তনের মত বোধগম্য ।

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