زبان برنامهنویسی امال
از ویکیپدیا، دانشنامهٔ آزاد
امال یک زبان برنامهنویسی تابعی همه منظوره است که توسط رابین میلنر و همکاران در اواخر دهه ۱۹۷۰ در دانشگاه ادینبورگ توسعه یافت. نحو آن از ISWIM الهام گرفته است.
کلمه 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_%28programming_language%29&oldid=196070433

