زبان برنامهنویسی امال
امال {انگلیسی|ML}، یک زبان برنامهنویسی تابعی همه منظوره است که توسط رابین میلنر و همکاران در اواخر دهه ۱۹۷۰ در دانشگاه ادینبورگ توسعه یافت. نحو این زبان از زبان برنامهنویسی آیسوییم الهام گرفته است.
کلمه ML از فوق زبان (Meta Language) گرفته شده است. امال برای بهبود بخشیدن به رویه اثبات در قضیه LFC طراحی شده است. این برای کاربرد آن در الگوریتم استنتاج نوع هیندلی- میلنر که به طور خودکار اکثر عبارتها بدون نیاز به تفسیر نوع صریح شناخته شده است.
== مرور کلی ==
امال معمولاً به عنوان یک زبان تابعی ناخالص یاد میشود. چرا که به اثرات جنبی و بنابراین برنامه نویسی امری، بر خلاف زبان برنامه نویسی تابعی خالص مانند هاسکل، اجازه میدهد. به همین دلیل امال یک زبان برنامهنویسی چند نمونهای (multi-paradigm) نیز عنوان میشود.
خصوصیات امال شامل استراتژی سنجش فراخوانی با مقدار (call – by – value)، توابع درجه یک، مدیریت حافظه خودکار در مواجه با مجموعه دادههای ناخواسته، چندریختی پارامتریک و انواع پویا، انواع استنتاج، انواع دادههای جبری، ازمون الگو و جابه جایی استثناء است.
برخلاف هاسکل، امال از ارزیابی مشتاق استفاده میکند به این معنا که تمام عبارات همگی ارزیابی میشوند. در نتیجه شما نمیتوانید مستقیماً از لیستهای نامحدود استفاده کنید. هرچند ارزیابی کند و بنابراین ساختمان دادههای نامحدود مانند لیستها میتوانند به واسطهٔ توابع بی نام شبیه سازی شوند.
امروزه زبانهای مختلفی در خانواده امال است دو گویش اصلی آن امال استاندارد و Caml است. اما بقیه شامل F# که یه پروژهٔ تحقیق باز که هدف .NET شرکت مایکروسافت بود نیز وجود دارند. ایدههای امال در زبانهای بی شماری نفوذ کرده است مانند هاسکل و Cyclone و Nemerle.
از تواناییهای امال معمولاً در طراحی زبان بکار برده میشود (کامپایلرها، استفاده برای تحقیقات زیستی، سیستمهای مالی و کاربردها شامل پایگاه دادههای شجره نامه ها، برنامهٔ سرویس دهنده / سرویس گیرنده نظیر به نظیر.
== مثال هایی از امال ==
تشریح برنامهٔ امال خالص
این فاکتوریل را به عنوان یک تابع بازگشتی با یک وضعیت پایه (base case) محدود توصیف میکند. این شبیه تعاریف فاکتوریل یافت شده در کتابهای درسی ریاضیات است. بسیاری از کدهای ML از نظر امکانات و نحو نیز شبیه ریاضیات است.
قسمتی از تعریف نشان داده شده اختیاری است و نوع این تابع را تعریف میکند. نشانه گذاری E: میتواند به عنوان عبارت E که دارای نوع t هست تلقی شود. برای مثال متغیر n، برای نوع صحیح (integer) است و نتیجهٔ اجرای fac برای n (fac(n) ) هم نوع صحیح دارد.
تابع همچنین وابسته به آزمون الگو است و این یک بخش مهم برنامه نویسی ML است. توجه کنید که پارامترهای تابع لزوماً در پرانتز نیستند اما حتماً توسط فاصله گذاری جدا شده اند. زمانی که متغیر ورودی تابع ۰ است، تابع نوع صحیح ۱ برمی گرداند، برای حلات دیگر خط دوم اجرا خواهد شد. این خط بازگشتی است و تابع را دوباره فراخوانی و اجرا میکند تا زمانی که به وضعیت پایه برسد.
== منبع ==
ویکیپدیای انگلیسی Wikipedia contributors, “ML (programming language),” Wikipedia, The Free Encyclopedia, http://en.wikipedia.org/w/index.php?title=ML_%28programming_language%29&oldid=196070433