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

میراندا یک زبان برنامه‌سازی غیر اکید، کاملا تابعی است که توسط David Turner به عنوان جانشینی برای زبان برنامه‌سازی قبلی او یعنی SASL و KRC طراحی شده، که از برخی مفاهیم ML و HOPE استفاده می‌کند. محصولی از شرکت Research Software انگلستان. کلمه Miranda نام تجاری است. این زبان اولین زبان کاملا تابعی است که مورد حمایت تجاری قرار گرفت.
راه حل اکثر مسائل نمونه در Miranda ساده‌تر و خلاصه‌تر از راه حل‌های زبان‌های برنامه‌سازی دیگر است به استثنای زبان APL و مانند اکثر زبان‌های برنامه‌سازی تابعی دیگر کاربران آن معتقدند که این زبان امکان ایجاد برنامه‌های قابل اعتمادتری را با زمان ایجاد کمتری نسبت به زبان‌های امری که قبلا استفاده می‌کرده‌اند فراهم می‌کند.
خلاصه
Miranda یک زبان کند و کاملا تابعی است. به این معنی که این زبان اثرات جانبی و خواص برنامه‌نویسی امری را ندارد. یک برنامه به زبان Miranda(که به عنوان Script شناخته می‌شود) مجموعه‌ای از معادلات می‌باشد که توابع مختلف ریاضی و انواع داده‌های جبری را تعریف می‌کند. کلمه مجموعه در اینجا مهم است: به‌طور کل ترتیب معادلات مهم نیست و برای استفاده از موجودیت‌ها الزامی در تعریف پیشاپیش آن‌ها وجود ندارد.
از آنجایی که الگوریتم تجزیه به صورت هوشمند از آرایش متن (توگذاری) استفاده می‌کند، به ندارت پیش می‌آید که استفاده از براکت لازم باشد و استفاده از پایان دهنده به دستورها نیز لازم نیست. این خصیصه که از ISWIM الگو برداری شده در occam و Haskell نیز مورد استفاده قرار گرفت و بعدها نیز توسط Python به شهرت رسید.
توضیحات در اسکریپت‌های عادی توسط کاراکتر
ارائه شد طوری‌که تا انتهای خط ادامه می‌یابد. قرارداد دیگر برای توضیحات حالتی بود که روی کل سند تحت عنوان «اسکریپت باسواد» تاثیر می‌گذاشت، به صورتی که هر خطی توضیحات در نظر گرفته می‌شد مگر اینکه با کاراکتر> شروع می‌شد.
پایه Miranda انواع char، num و bool می‌باشند. یک رشته کاراکتری به‌طور ساده لیستی از کاراکترهاست، در حالی که نوع num به‌طور داخلی بین دو فرم تبدیل می‌شود: اعداد صحیح با دقت دلخواه (به عبارت دیگر اعداد بزرگ) فرم پیش فرض، و در صورت لزوم مقادیر معمول ممیز شناور.
چندتایی‌ها همانند رکوردها در زبان‌های شبه پاسکال دنباله‌ای از عناصر مختلط بالقوه هستند، وتوسط پرانتزها نوشته می‌شوند:
this_employee = («Folland, Mary», ۱۰۵۶۰, False, ۳۵)
week_days = "Mon","Tue","Wed","Thur","Fri"
در عوض لیستها رایج‌ترین ساختار داده‌ای مورد استفاده در Miranda می‌باشند. لیستها توسط کروشه‌ها نوشته می‌شوند و عناصر آن‌ها توسط کاما از هم جدا می‌شوند. عناصر لیست‌ها همگی باید از یک نوع باشند:
week_days = "Mon","Tue","Wed","Thur","Fri"
اتصال لیست‌ها توسط ++، تفاضل آن‌ها توسط --، ایجاد آن‌ها توسط :، اندازه آن‌ها توسط # و اندسی دهی آن‌ها توسط ! انجام می‌شود بنابراین:
days = week_days ++ "Sat","Sun"
days = "Nil":days
days!۰ ? "Nil"
days = days -- "Nil"
#days ? ۷
چند راه سریع برای ایجاد لیست‌ها نیز وجود دارد:.. برای لیستهایی به کار می‌رود که عناصر آن‌ها سری‌های ریاضی‌اند و امکان داشتن گام افزایشی غیر از یک را نیز برای آن‌ها فراهم کرده:
fac n = product
odd_sum = sum
رایج‌ترین و قوی‌ترین تسهیلات ایجاد لیست‌ها در Miranda توسط «list comperhension»ها ارائه می‌شود (که قبلا تحت عنوان عبارت‌های ZF شناخته می‌شدند)، که به دو صورت عمده استفاده می‌شود:
عبارتی که به دنباله‌ای از جمله‌ها اعمال می‌شود:
squares = n
*
نهایتا این که این زبان مکانیزم‌هایی برای ایجاد و مدیریت ماژول‌های برنامه، ای را داراست که توابع داخلی آن‌ها از دید برنامه‌هایی که این ماژول‌ها را فرا می‌خوانند پوشیده‌است.
کدهای نمونه
اسکریپت Mirandی زیر مجموعه همه زیر مجموعه‌های یک مجموعه از اعداد را تعیین می‌کند.
subsets =
subsets (x:xs) = y
primes = sieve
> sieve (p:x) = p: sieve n <- x; n mod p ~= ۰