ام‌ال (زبان برنامه‌نویسی)

از ویکی‌پدیا، دانشنامهٔ آزاد
پرش به: ناوبری، جستجو
ام‌ال
گونه تابعی
منتشر شده در ۱۹۹۷
طراح(ها) رابین میلنر و همکاران
تاثیر گرفته از آی‌سوییم

ام‌ال (به انگلیسی: ML)، یک زبان برنامه‌نویسی تابعی همه منظوره است که توسط رابین میلنر و همکاران در اواخر دهه ۱۹۷۰ در دانشگاه ادینبورگ توسعه یافت. نحو این زبان از زبان برنامه‌نویسی آی‌سوییم الهام گرفته است.

کلمه ML از فوق زبان (Meta Language) گرفته شده است. ام‌ال برای بهبود بخشیدن به رویه اثبات در قضیه LFC طراحی شده است. این برای کاربرد آن در الگوریتم استنتاج نوع هیندلی- میلنر که به طور خودکار اکثر عبارت‌ها بدون نیاز به تفسیر نوع صریح شناخته شده است.

مرور کلی[ویرایش]

ام‌ال معمولاً به عنوان یک زبان تابعی ناخالص یاد می‌شود. چرا که به اثرات جنبی و بنابراین برنامه نویسی امری، بر خلاف زبان برنامه نویسی تابعی خالص مانند هاسکل، اجازه می‌دهد. به همین دلیل ام‌ال یک زبان برنامه‌نویسی چند نمونه‌ای (multi-paradigm) نیز عنوان می‌شود.

خصوصیات ام‌ال شامل استراتژی سنجش فراخوانی با مقدار (call – by – value)، توابع درجه یک، مدیریت حافظه خودکار در مواجه با مجموعه داده‌های ناخواسته، چندریختی پارامتریک و انواع پویا، انواع استنتاج، انواع داده‌های جبری، ازمون الگو و جابه جایی استثناء است.

برخلاف هاسکل، ام‌ال از ارزیابی مشتاق استفاده می‌کند به این معنا که تمام عبارات همگی ارزیابی می‌شوند. در نتیجه شما نمی‌توانید مستقیماً از لیست‌های نامحدود استفاده کنید. هرچند ارزیابی کند و بنابراین ساختمان داده‌های نامحدود مانند لیست‌ها می‌توانند به واسطهٔ توابع بی نام شبیه سازی شوند.

امروزه زبان‌های مختلفی در خانواده‌ام‌ال است دو گویش اصلی آن ام‌ال استاندارد و Caml است. اما بقیه شامل F# که یه پروژهٔ تحقیق باز که هدف .NET شرکت مایکروسافت بود نیز وجود دارند. ایده‌های ام‌ال در زبان‌های بی شماری نفوذ کرده است مانند هاسکل و Cyclone و Nemerle.

از توانایی‌های ام‌ال معمولاً در طراحی زبان بکار برده می‌شود (کامپایلرها، استفاده برای تحقیقات زیستی، سیستم‌های مالی و کاربردها شامل پایگاه داده‌های شجره نامه ها، برنامهٔ سرویس دهنده / سرویس گیرنده نظیر به نظیر.

مثال هایی از ام‌ال[ویرایش]

تشریح برنامهٔ ام‌ال خالص[ویرایش]

برنامهٔ Hello world! یک زبان تابعی، تابع فاکتوریل است. به عنوان یک ام‌ال خالص:

 fun fac (0 : int) : int = 1
   | fac (n : int) : int = n * fac (n-1)

این فاکتوریل را به عنوان یک تابع بازگشتی با یک وضعیت پایه (base case) محدود توصیف می‌کند. این شبیه تعاریف فاکتوریل یافت شده در کتاب‌های درسی ریاضیات است. بسیاری از کدهای ML از نظر امکانات و نحو نیز شبیه ریاضیات است.

قسمتی از تعریف نشان داده شده اختیاری است و نوع این تابع را تعریف می‌کند. نشانه گذاری E: می‌تواند به عنوان عبارت E که دارای نوع t هست تلقی شود. برای مثال متغیر n، برای نوع صحیح (integer) است و نتیجهٔ اجرای fac برای n (fac(n) ) هم نوع صحیح دارد.

بنابراین تابع فاکتوریل تابعی از نوع صحیح به نوع صحیح ( int -> int ) است. به خاطر نوع استنتاج، حاشیه نویسی نوع می‌تواند حذف شود و توسط کامپایلر نتیجه گیری شود. بازنویسی بدون درج نوع مانند مثال:

fun fac 0 = 1
   | fac n = n * fac (n-1)

تابع همچنین وابسته به آزمون الگو است و این یک بخش مهم برنامه نویسی ML است. توجه کنید که پارامترهای تابع لزوماً در پرانتز نیستند اما حتماً توسط فاصله گذاری جدا شده‌اند. زمانی که متغیر ورودی تابع 0 است، تابع نوع صحیح 1 برمی گرداند، برای حلات دیگر خط دوم اجرا خواهد شد. این خط بازگشتی است و تابع را دوباره فراخوانی و اجرا می‌کند تا زمانی که به وضعیت پایه برسد.

منابع[ویرایش]

ویکی‌پدیای انگلیسی Wikipedia contributors, "ML (programming language)," Wikipedia, The Free Encyclopedia, http://en.wikipedia.org/w/index.php?title=ML_(programming_language)&oldid=196070433