-
معرفي زبان برنامه نویسي ml
مرور کلی
ML یکزبان برنامه نویسی تابعی است که به وسیله یرابین میلنرو دیگران در اواخر دهه ی 1970در دانشگاهادین برگگسترش یافت، قواعد نحوی آن الهامشده از ISWIM است.
یک گرایش مهم در طراحی زبان در دهه ۸۰ تمرکز بیشتر روی برنامه نویسی برای سیستمهای بزرگ از طریق تابعها، و یا واحدهای کدهای سازمانی بزرگ مقیاس بود. Ada و ML همگی سیستمهای تابعی برجستهای را در دهه ۸۰ توسعه دادند.
کلمه ML از فوق زبان (Meta Language) گرفته شده است.از لحاظ تاریخی، ML سمبل یک فوقزبان است.ML برای بهبود بخشیدن به رویه اثبات در قضیه LFC طراحی شده است. این برای کاربرد آن در الگوریتم استنتاج نوع هیندلی- میلنر که به طور خودکار اکثر عبارت ها بدون نیاز به تفسیر نوع صریح شناخته شده است.
زبانی که ML فوق زبان آن بود pplambda است، یک ترکیبی ازحساب نسبی مرتبه اولو حساب lambda چندریختی نوع دار.
ویژگیهای ML شامل استراتژی ارزیابیفراخوانی با مقدار (call – by – value)،نوع دهیاستاتیک،استنباط نوعی،نوع داده ای جبری،تطابق الگوومدیریت استثنا، توابع درجه یک، مدیریت حافظه خودکار در مواجه با مجموعه داده های ناخواسته، چندریختی پارامتریک و انواع پویا، انواع استنتاجمی باشد. این ترکیب ویژه ازمفاهیم امکان تولید یکی از بهترین کامپایلرهای موجود را می دهد.
ML از چند ریختی وانتزاع پشتیبانی می کند. زبان اصلی ، بخصوص در مقایسه با زبانی مثل (Ada) فشرده است. توسعه در آن موجب شد تا بتوان برنامه های پیچیده را نوشت . شامل استثناء ها ، برنامه نویسی دستوری وتابعی ، مشخصات مبتنی بر قانون وبسیاری از مفاهیمی است که در اغلب زبانها وجود دارد. زبان ML برای مطالعه بسیاری از مفاهیم زبانهای برنامه سازی مفید است.
وضوح مکانیزم نوع در سطح زبان منبع ، ویژگی ای است که در سایر زبانها وجود ندارد . اما کاربردهای اقتصادی زبان ML کمتر است ولی دارای چرخه کاربرد آموزشی وتحقیقاتی است (لازم به ذکر است که قسمت هوش مصنوعی بعضی از بازی های رایانه ای هم توسط همین زبان تهیه گردیده است) .
امروزه زبان های مختلفی در خانواده ی ML وجود دارد؛ معروف ترین آن SML است ( ML استاندارد) و Objective Caml. اما بقیه شامل F# که یه پروژه ی تحقیق باز که هدف .NET شرکت مایکروسافت بود نیز وجود دارند.
ایده های ML روی زبان های دیگر، به ویژه آنهایی که در دانشگاه ها طراحی شده اند تاثیرگذاشت. نمونه های آن شامل Cyclone و Nemerle است.
درضمن لازم به ذکر می باشد که از این زبان زبانهای دیگری نیز مشتق شده که در جای خودقابل تامل وبحث می باشد.زبانهایی مانند XML,GML,UML,.....
قدرت ML اغلب در طراحی و دستکاری زبان به کار می رود (کامپایلرها، تحلیلگرها، ثابت کنندههای نظریه)، اما ML همچنین در تحقیقات زیستی، سیستم های مالی، بانک های اطلاعاتی شجره ای، برنامه ی سرویس دهنده / سرویس گیرنده ی نظیر به نظیر و ... کاربرد دارد.
ML معمولاً به عنوان یک زبان تابعی ناخالص یاد می شود. چرا که به اثرات جنبی و بنابراین برنامه نویسی رویه ای، بر خلاف زبان برنامه نویسی تابعی خالص مانند هاسکل، اجازه میدهد. به همین دلیل ML یک زبان برنامهنویسی چند نمونهای (multi-paradigm) نیز عنوان میشود.
برخلاف هاسکل، ML از ارزیابی سریع استفاده میکند به این معنا که تمام عبارات همگی ارزیابی می شوند. در نتیجه شما نمی توانید مستقیماً از لیست های نامحدود استفاده کنید. هرچند ارزیابی کند و بنابراین ساختمان داده های نامحدود مانند لیست ها می توانند به واسطه ی توابع بی نام شبیه سازی شوند.
-
اشیاء داده
ü انواع داده اولیه
ü متغیرها وثوابت
ML دارای ثوابت صحیح (int) ، اعشاری (real) ، بولین (bool) و رشته ای (string) است . برای مقادیر منفی صحیح واعشاری از علامت ~ استفاده میکند ونسبت به حروف کوچک و بزرگ حساس است. برای نمایش کاراکتر های کنترلی از قواعد Cاستفاده می کند. برای استفاده از کاراکترهای کنترلی در رشته ،\n برای خط جدید،\" برای " ، \t برای کاراکتر tab و \ddd به کار می رود که ddd یک کد سه رقمی مبنای 8 برای کاراکتر است.
شناسه ها ، رشته هایی از نماد هستند که با حروف یا آپاستروف(') شروع می شود و با حروف ، ارقام وخط زیر(_) ادامه می یابد. شناسه هایی که با آپستروف شروع می شوند ، شناسه های نوعند.
Integers:
· Positive integers: 123, 0, 3111
· Negative integers: ~123, ~10, ~1111
· Hexadecimal: 0x1234 Þ val it = 4660:int
Reals:
· Positive reals: 123.01 Þ val it = 123.01:real
· Negative reals: ~100.0
· Scientific reals: 3E~3 Þ 0.003 , 3.14e12 Þ 3.14 ×1012
Boolean:
· true Þ val it = true: bool
· false
Strings:
· Example: “R2D2” Þ val it = “R2D2”:string
· \n means new line
Characters:
· Example: #”x” represents character x Þ val it = #”x”: char
ساختمان داده ها
ML شامل چندتایی ، لیست ورکورد است.
ü چندتایی
چندتایی (touple) دنباله ای از اشیاء است که با کاما از هم جدا شده اند و درپرانتز قرار دارند.(12,"abc",3) یک چندتایی از نوع int*string*int است . چندتایی ها می توانند تو در تو باشند:
(2,"a",(3,4.3) ,"xyz" ,(true,7))
این چندتایی از نوع int*string*(int*real)*string*(bool*int)) است. I اُمین عنصر چندتایی به صورت #i بازیابی می شود. برای مثال ، عضو دوم چندتایی با #2 مشخص می شود ، به طوری که #2(2,4,6)=4
Example:
o val t = (4, 5.0, “six”); val t = (4, 5.0, “six”): int * real * string
o val u = (1, (2, 3.0)); val u = (1, (2, 3.0)): int * (int * real)
ü لیست
لیست یک چند تایی است که شامل یک نوع اشیاء است . لیست رشته ای به صورت["a","b","c","d"] و نوع نتیجه string list است. به همین ترتیب ،[[1,2],[3,4]] از نوع int list list یا لیستی از لیستهایی از مقادیرصحیح است . لیست تهی را nil گویند .
Example:
o [1, 2, 3]; val it = [1, 2, 3]: int list
o [[(1, 2), (3, 4)], [(5, 6)], nil]; val it = [[(1, 2), (3, 4)], [(5, 6)], nil]int * int) list list
@ : اجتماع دو لیست با عملگر
علامت @ دو عملونده است.
Example: [1, 2] @ [3, 4];
val it = [1, 2, 3, 4]: int list
Cons operator :
عملگر سمت چپ باید عدد و عملگر سمت راست باید لیست باشد.
Example:
2 :: [3, 4]; val it = [2, 3, 4]: int list
2.0 :: nil; val it = [2.0]: real list
اجتماع لیست های رشته ای
Example: concat([“ab”, “cd”, “e”]); val it = “abcde”: string
ü رکورد
رکورد در ML از نحو {label1=value, lable2= value,…} استفاده می کند که عناصر با عملگر#label انتخاب می شوند . چندتایی ها ،حالتهای خاصی از رکوردها هستند .
چندتایی (10,23,"a") نمونه ای از رکورد {1=100 ,2=23,3="a"} است.زبان های شیء گرا همچون جاوا و Smalltalk و C++ رکوردها رادر داخل اشیاء پنهان سازی می کنند که در واقع نمونه های گرفته شده از کلاس را شیءگویند. زبان هایی از خانواده ی ML به این ساختارها رکوردمی گویند.
برچسب برای این موضوع
مجوز های ارسال و ویرایش
- شما نمی توانید موضوع جدید ارسال کنید
- شما نمی توانید به پست ها پاسخ دهید
- شما strong>نمی توانید فایل پیوست ضمیمه کنید
- شما نمی توانید پست های خود را ویرایش کنید
-
قوانین انجمن