استاندارد ام‌ال

استاندارد ام‌ال  یا SML یک زبان برنامه‌نویسی همه منظوره مدولار، تابعی با بررسی همزمان هنگام کامپایل و تشخیص خودکار نوع متغیرها است. این زبان برنامه‌نویسی در میان نویسنده‌های کامپایلر و محققان زبان برنامه‌نویسی و در اثبات قضیه خودکار محبوبیت دارد.

 زبان 
استاندارد ام‌ال یک زبان برنامه‌نویسی تابعی با برخی ویژگی‌های ناخالص است. برنامه‌های نوشته شده به زبان استاندارد ام‌ال شامل عبارت‌هایی برای ارزیابی هستند. بر خلاف دستورها برنامه‌نویسی معمول، برخی از عبارت‌ها یک مقدار واحد را بازمی‌گردانند. برخی از آن‌ها نیز تنها برای تأثیرهای جانبی ارزیابی می‌شوند.

مثل همه زبان‌های برنامه‌نویسی تابعی، توابع یک ویژگی کلیدی استاندارد ام‌ال هستند که برای انتزاع استفاده می‌شوند. برای مثال تابع فاکتوریل می‌تواند به صورت زیر بیان شود:

 fun factorial n =
        if n = 0 then 1 else n * factorial (n-1)
کامپایلر استاندارد ام‌ال نوع int -> int برای این تابع را بدون وارد کردن نوع متغیرها توسط کاربر باید تفسیر کند. به عبارت دیگر کامپایلر وظیفه دارد تا تفسیر کند که n تنها همراه با عبارات INT می‌تواند استفاده شود، بنابراین نوع n نیز باید از نوع INT بوده و همه مقادیر برگشتی از تابع فوق نیز از همین نوع باشند.

تابع فاکتوریل می‌تواند به صورت شروط اگر-آنگاه در قالب دنباله‌ای از توابع فاکتوریل که به صورت شکل قالب مانند بیان شده‌اند، نیز تعریف شود. این توابع با '|' از یکدیگر متمایز می‌شوند و به صورت چسبیده به یکدیگر تعریف می‌شوند.
 fun factorial 0 = 1
   | factorial n = n * factorial (n - 1)
که می‌تواند با استفاده از عبارات case نیز به صورت زیر بازنویسی شود:
 val rec factorial =
        fn n => case n of 0 => 1
                        | n => n * factorial (n - 1)
و یا با استفاده از تابع لامبدا: val rec factorial = fn 0 => 1 | n => n * factorial(n -1)
با استفاده از یک تابع محلی، تابع فاکتوریل می‌تواند به صورت بهینه‌تری بازنویسی شود:
 fun factorial n = let
      fun lp (0, acc) = acc
        | lp (m, acc) = lp (m-1, m*acc)
      in
        lp (n, 1)
      end
مابین عبارت let و in تابع lp تعریف می‌شود و هنگام فراخوانی تابع فاکتوریل (بین عبارت in و end) اجرا می‌شود.

 جستارهای وابسته 
 آلیس
 ام‌ال
 اف شارپ
 اکمل

 منابع 
ترجمهٔ ویکی‌پدیا انگلیسی

رده:زبان‌های برنامه‌نویسی رویه‌ای
رده:زبان‌های برنامه‌نویسی ساخته‌شده در ۱۹۹۰ (میلادی)
رده:زبان‌های تابعی
رده:زبان‌های برنامه‌نویسی سطح بالا
رده:زبان‌های برنامه‌نویسی ساخته‌شده در ۱۹۸۳ (میلادی)