منو
 کاربر Online
431 کاربر online

زبان برنامه نویسی Haskell

تازه کردن چاپ
علوم ریاضی > علو م رایانه
(cached)




تعریف

img/daneshnameh_up/1/1e/compics039.jpg

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 img/daneshnameh_up/c/cc/compics054.jpg1.. n img/daneshnameh_up/5/56/compics055.jpg.
پیاده سازی ساده از تابع که 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 ++img/daneshnameh_up/c/cc/compics054.jpg pivot img/daneshnameh_up/5/56/compics055.jpg ++ qsort right
where
] left = y l y < - tail ' y < pivot ]
] right = y l y < - tail ' y >= pivot ]
( توجه کنید که کپی شدن منوط و زنجیره بودن لیست این کد بسته به پیاده سازی اش می تواند آهسته تر باشد.)


پیاده سازی


موارد زیر خیلی یا اندکی شبیه به استانداردهای 98 Haskell هستند و تحت جوازهای منابع باز تقسیم بندی شده اند. در حال حاضر پیاده سازی تجاری Haskell موجود نیست.
1- Hugs مترجم کدهای بایت است. و به سرعت برنامه ها را تلفیق و اجرا می کند. همچنین با یک کتابخانه گرافیکی ساده ظاهر شده است. Hugs برای افرادی که قصد دارند اصول پایه ای Haskell را بیاموزند مناسب است ملی به این معنی نیست که یک وسیله بازی است. Hugs سبک ترین و ساده ترین پیاده سازی Haskell است.
2- GHC به کدهای نهادی از معماران متفاوتی تالیف می کند. و همچنین می تواند به C تالیف کند. شاید GHC، معروف ترین مولف Haskell باشد و چندین کتابخانه قابل استفاده که تنها با GHC کار می کنند موجود است (محدود شده به OpenGL )
3- nhc98 یک دیگر ار مولفان کد بایتی است، ولی عموماً کد بایتی ای که سریع تر از Hugs باشد nhc98 به حداقل رساندن استفاده از حافظه توجه کرده است و عملاً انتخاب مناسبی برای ماشین های کندتر و قدیمی تراست.
4- HBC مولف Haskell دیگری برای کدهای نهادی است. HBC به طور فعال توسعه نیافته است ولی هنوز هم قابل استفاده می باشد.
5- Helium جدیدترین گویش Haskell است. هدف اصلی آن آسان کردن یادگیری Haskell می باشد، در حال حاضر فقدان برخی از انواع کلاس ها، آنرا با برخی از برنامه های Haskell ناسازگار ساخته است.


پیوندهای خارجی


همچنین ببینید




تعداد بازدید ها: 17340


ارسال توضیح جدید
الزامی
big grin confused جالب cry eek evil فریاد اخم خبر lol عصبانی mr green خنثی سوال razz redface rolleyes غمگین smile surprised twisted چشمک arrow



از پیوند [http://www.foo.com] یا [http://www.foo.com|شرح] برای پیوندها.
برچسب های HTML در داخل توضیحات مجاز نیستند و تمام نوشته ها ی بین علامت های > و < حذف خواهند شد..