زبان برنامه نویسی Haskell
Haskell زبان برنامه نویسی تابعی استاندارد شده با زبان شناسی غیر قطعی، بعد از
Haskell Curry نام گذاری شد. این زبان با کمیته ای که در سال
1980 برای بیان هدف شناساندن این چنین زبانی شکل گرفت، ایجاد شد. آخرین استاندارد زبان نیمه رسمی
Haskell 98 نامزد زبان آسان و سبک برای آموزش و به عنوان پایه ای برای گسترش های آینده است. زبان به تکامل خود به سرعت با
Hugs و
GHC که نشان دهنده ی استاندارد بالفعل جاری هستند، ادامه می دهد.
جالب ترین جنبه Haskell شامل پشتیبانی از توابع
بازگشتی و انواع داده ای،
مطابقت با الگو،
درون یابی لیستو
عبارات دفاعی می باشد. ترکیب این خصوصیات می تواند توابعی را بسازد که نوشتن آنها در زبان برنامه نویسی شیوه ای سخت خواهد بود ولی غالباً اجرای آن در Haskell آسان است در سال 2002، این زبان یک
زبان تابعی است که اغلب تحقیقات روی آن صورت گرفته است. چندین گونه از این زبان توسعه یافته اند: نسخ همگون با
MIT و
Glasgow ، هر دو Haskell مشابه نامیده می شوند. نسخی که بیشتر نظیر دارند و تقسیم شده اند، Haskell تقسیم شده خوانده می شوند (سابقاً Goffin) و Eden ، نسخه
ارزیابی نظری ، Haskell خواهان نامیده می شود و چندین نسخ شی گرا: Haskell ++ ، Mondrian و O' Haskell .
یک زبان مشابه Haskell نیز موجود است که روش های جدید پشتیبانی از پیشرفت
GUI را ارائه می دهد که
کاملاً همگام نامیده می شود. بزرگترین تفاوت این زبان با Haskell در استفاده از
انواع یکتا برای ورودی به دلیل ضدیت با واحدیت است.
نسخه تحصیلاتتی Haskell که Gofer نامیده می شود توسط Mark Jones توسعه یافت. این نسخ توسط HUGS غصب شده است. (بخش
پیاده سازی را از این مقاله ببینید).
برای اطلاع جامع بیشتر، وب سایت haskell. org ، که در انتهای مقاله پیوست شده است را ببینید.
مثال ها
تعریف کلاسیک از
تابع فاکتوریل:
fac 0 = 1
fac n = n * fac ( n - 1 )
تعریف بامزه از تابع فاکتوریل ( با استفاده از لیست علامت گذاری، Haskell درون ساختی و تابع استاندارد product):
fac n = product
1 . . n
پیاده سازی ساده از تابع که n امین عدد را در
سری فیبونانچی برمی گرداند:
fib 0 = 0
fib 1 = 1
fib n = fib ( n - 2 ) + fib ( n - 1 )
تابعی که لیست اعداد فیبونانچی را در زمان خطی باز می گرداند:
fibs@ ( - : rest ) = 0 : 1 : ( zipwith (+) fibs rest )
تابع قبلی به دلیل ارزیابی کند و آهسته یک لیست محدود را تولید می کند. یکی از پیاده سازی ممکن fib عبارتست از:
fib n = fibs ! ! n
( !! ؟ است که n امین عنصر از لیست را می دهد).
الگوریتم
مرتب سازی سریع می تواند به گونه ای برازنده در Haskell به کمک درون یابی لیست بیان شود.
qsort [] = []
qsort ( pivot : tail ) =
qsort left ++
pivot ++ qsort right
where
] left = y l y < - tail ' y < pivot ]
] right = y l y < - tail ' y >= pivot ]
( توجه کنید که کپی شدن منوط و زنجیره بودن لیست این کد بسته به پیاده سازی اش می تواند آهسته تر باشد.)
پیاده سازی
موارد زیر خیلی یا اندکی شبیه به استانداردهای 98 Haskell هستند و تحت جوازهای
منابع باز تقسیم بندی شده اند. در حال حاضر پیاده سازی تجاری Haskell موجود نیست.
( (http://www.haskell.org/hugs)
1))) ((Hugs* مترجم کدهای بایت است. و به سرعت برنامه ها را تلفیق و اجرا می کند. همچنین با یک کتابخانه گرافیکی ساده ظاهر شده است. Hugs برای افرادی که قصد دارند اصول پایه ای Haskell را بیاموزند مناسب است ملی به این معنی نیست که یک وسیله بازی است. Hugs سبک ترین و ساده ترین پیاده سازی Haskell است.
- ( (http://www.haskell.org/ghc) 2))) ((GHC به کدهای نهادی از معماران متفاوتی تالیف می کند. و همچنین می تواند به C تالیف کند. شاید GHC، معروف ترین مولف Haskell باشد و چندین کتابخانه قابل استفاده که تنها با GHC کار می کنند موجود است (محدود شده به OpenGL)
- http://www.cs.york.ac.uk/fp/nhc98/) 3) ((nhc98 یک دیگر ار مولفان کد بایتی است، ولی عموماً کد بایتی ای که سریع تر از Hugs باشد nhc98 به حداقل رساندن استفاده از حافظه توجه کرده است و عملاً انتخاب مناسبی برای ماشین های کندتر و قدیمی تراست.
- http://www.cs.uu.nl/helium/) 5) ((Helium جدیدترین گویش Haskell است. هدف اصلی آن آسان کردن یادگیری Haskell می باشد، در حال حاضر فقدان برخی از انواع کلاس ها، آنرا با برخی از برنامه های Haskell ناسازگار ساخته است.
پیوندهای خارجی
طبقات:
گویش هایHaskell |
زبان های برنامه نویسی |
زبان های تابعی |
زبان های برنامه نویسی اظهاری