یک زبان برنامه نویسی تابعی :: A purely functional programming language

پروژه هسکل

پروژه هسکل

در این پست بنا دارم کلیه مطالب ارائه شده به عنوان پروژه برنامه نویسی به زبان هسکل را که در 9 دی 93 در موسسه جهاد دانشگاهی ارائه نمودم را در اختیار دانشجویان و دانش پژوهان قرار میدهم. به امید اینکه به کار آید.
در ابتدا صورت سوال و نحوه پاسخگویی را دانلود کنید:


در بخش دیگر بد نیست پاروپوینت ارائه شده در این سیمینار را ببینید:

و از همه مهم تر به سراغ کدهای این پروژه را به صورت جداگانه ببینید و با فرمت hs دانلود کنید:
{-# OPTIONS_GHC -Wall #-}
module SAWARi where

-- Part one

-- Ex1
toDigits :: Integer -> [Integer]
toDigits x
| x > 0 = toDigits (div x 10) ++ [mod x 10]
| otherwise = []

toDigitsRev :: Integer -> [Integer]
toDigitsRev x
| x > 0 = reverse (toDigits x)
| otherwise = []

-- Ex2
doubleEveryOther :: [Integer] -> [Integer]
doubleEveryOther [] = []
doubleEveryOther (x:[]) =[x*2]
doubleEveryOther (x:[y]) = [x*2] ++ [y]
doubleEveryOther (x:y:xy) = [x*2] ++ [y] ++ doubleEveryOther xy

-- Ex3
sumDigits :: [Integer] -> Integer
sumDigits [] = 0
sumDigits (x:[]) = (mod x 10) + (div x 10)
sumDigits (x:xy) = ((mod x 10) + (div x 10)) + sumDigits xy


-- Ex4
validate :: Integer -> Bool
validate x = (mod (sumDigits (doubleEveryOther (toDigitsRev x))) 10) == 0

دانلود با فرمت hs:

در پایان از استادی عزیز درس طراحی و پیاده سازی زبان های برنامه سازی خانم طاهری فر تشکر میکنم که من را به انجام این پروژه و کسب این تجربه متفاوت ترغیب کردند.
علی سواری
۰ نظر موافقین ۰ مخالفین ۰
آشنایی با زبان برنامه نویسی هسکل

آشنایی با زبان برنامه نویسی هسکل

هسکل (به انگلیسی Haskell) یک زبان برنامه نویسی تابعی است و برای افرادی که سر و کارشان با فرمولها و الگوریتمهای ریاضی است ، بسیار مناسب میباشد.

برای شروع به چه چیزی نیاز داریم؟

اما به هاسکل برای پردازش روی اعداد ساخته شده است، پس اینجا به مثال HelloWorld هیچ نیازی نیست. هرحال یک زبان برنامه نویسی بوده و به یک ادیتور و یک محیط کامپایلر نیاز دارد. همچنین این زبان دارای Shell مخصوص به خود نیز هست . (درست همانند پایتون) . برای ادیتور، نیاز نیست حتما ادیتوری پیشرفته نصب کنید (یا بخرید). با ساده ترین ادیتور نیز میتوانید کارتان را راه بیندازند.
جهت اطلاع از سایر کامپایلرها میتوانید به وبگاه رسمی  هاسکل مراجعه کنید.

هاسکل چه ویژگی هایی دارد؟

هاسکل کمی تنبل است ، درست شنیدید! تنبل! میپرسید چرا؟ برای این که این زبان یک تابع که شما نوشته
اید را ، تنها زمانی اجرا میکند که فراخوانی شود. در زمان دیگری آن تابع اجرا نمیشود.
٣ چه زبانهای دیگری عملکردی مشابه هاسکل دارند؟
زبانهای زیادی هستند ، مشهور ترین آنها در دنیای لینوکس R است. همچنین در دنیای کاربران سایر سیستم ، MATLAB نیز از محبوبیت بالایی برخوردار است. شما مختارید که بین این زبانها ، یک یا چند تا را انتخاب کرده و یاد بگیرید اما پیشنهاد من به شما هاسکل است ، زیرا هم ساده است و هم دید ریاضیاتی شما را بالا میبرد!
٤ شروع آموزش
در ابتدا با چنین صحنه ای روبرو خواهید شد:
GHCi, version 7.4.2: http://www.haskell.org/ghc/ :? for help
Loading package ghc-prim ... linking ... done.
Loading package integer-gmp ... linking ... done.
Loading package base ... linking ... done.
Prelude>

عبارت  Prelude در واقع Prompt شل   ghciاست. ابتدا چند مساله ساده را بیایید کمی امتحان کنیم .
Prelude> 2+2
4
Prelude> 2+3
5
Prelude> sin(45)
0.8509035245341184
نتیجه را دیدید . بله ، دقیقا همان کارهایی که با ماشین حساب مهندسی انجام میدهیم در این زبان هم امکان پذیر است. اما توجه کنید که اینجا پردازنده کوچک ماشین حساب طرف حساب ما نیست ، حتی اگر از ضیف ترین سیستم مدرن هم استفاده کنید حداقل یک پردازنده ٢ گیگاهرتز ٢ هسته ای دارید که از ماشین حسابهای مهندسی معمولی بسیار قوی تر است. اما آیا باید به همین ها بسنده کنیم؟ نه الزامی ندارد. در ادامه شما را آشنا میکنیم. شاید شما هم روزانه در ترمینال لینوکس یا مکینتاش یا هر سیستم عامل دیگری مشغول کار میشوید.  تبریک! بسیاری از دستورات اینجا نیز شبیه ترمینال یونیکس است. برای تغییر به یک دایرکتوری خاص (مثلا میزکار) باید این دستور را وارد کنید :
:cd ~/Desktop
همچنین برای خروج از کامپایلر کد زیر را وارد نمایید :
:quit

تعریف متغیر

این محیط هم متغیرهایی در خود دارد. مثلا یکی از معروف ترینها همان عدد نام آشنای « پی » است. جهت دیدن مقدار این عدد در شل pi وارد کنید و نتیجه را ببینید
Prelude> pi
3.141592653589793
خب آیا خودمان هم میتوانیم متغیر معرفی کنیم؟ جواب شما بله است. اصل برنامه نویسی و محاسبات در رایانه ، این است که همه چیز را خودمان تعیین کنیم و فقط هنگام اجرای برنامه ها ، مقادیر دلخواه را بعنوان مقدار r مقدار متغیر ها به آن بدهیم. متغیرها در هاسکل بسیار ساده تعریف میشوند، برای مثال میخواهیم برای ٣ را تعیین کنیم. پس به این روش عمل میکنیم :
Prelude> let r = 3
Prelude> r
3

توضیح آنکه در خط اول به ازای  ghci مقدار ٣ را تعریف نموده و در خط دوم ، آنرا فراخوانده ایم و سپس با نوشتن r نیز به ما نتیجه را نشان داده است. این یک مقدمه است. مقدمه ای برای اینکه در یک فایل دیگر، توابعی را بنویسیم و سپس آن را کامپایل کنیم. به نظرتان چیزی کم نیست؟ درست است تا اینجا در مورد توابع صحبت نکرده ایم. در بخش بعدی به خوبی تکلیف توابع را روشن خواهیم کرد.

توابع در Haskell

همانگونه که میدانید هاسکل یک زبان تابعی است و مطمئنا همین توابع هستند که رنگ و بوی دیگری به هاسکل میدهند. برای اینکه ببینیم توابع در هاسکل چه تعریفی دارند باید تعریف ریاضی تابع را بدانیم. به عبارت دقیقتر هر کجا و در هر زبانی سخن از تابع به میان می آید ، همان تعریف توابع ریاضی را باید دانست.
حال ببینیم تعریف ریاضی تابع چیست؟ ریاضی میگوید «تابع قانونی است از  A به B  که در آن ، به هر عضو A  دقیقا یک عضو از B نظیر میشود»
میتواند A هرچیزی میتوانند باشند ، مثلا مجموعه B و A مجموعه های افراد یک جامعه می توانند یک مجموعه گروه خونی آنان باشد. در هاسکل میتوانند به عنوان مقدار یک متغیر تعریف شوند. و از همه مهم تر ، هاسکل هم فقط از شما عدد را قبول میکند نه یک سری حروف به عنوان گروه خونی. این همه مقدمه چینی کردیم، حال یک تابع مینویسیم.
ما در اینجا یک تابع داریم که به ازای هر ورودی، مساحت دایره ای با شعاع ورودی را میدهد. پس مجموعه A مجموعه تعدادی شعاع و مجموعه B مجموعه مساحتهاست.  خب کد و نتیجه کار ما این خواهد شد :
Prelude> let area r = pi*(r^2)
Prelude> area 5
78.53981633974483
توضیح این کد که واضح است. در خط اول یک تابع نوشتیم. در تابع گفته شد که هر مقداری به ازای r داده ایم r ضرب کن. در خط دوم هم که یک مقدار به ازای pi دریافت نمودی ، آن را به توان ٢ برسان و در
، این عملیات روی آن انجام شد و سپس خروجی عددی گرفتیم. نکته دیگر آنکه دقت هاسکل بسیار بالاست.
خب چطور است به همراه هم یک تابع دیگر نیز بنویسیم؟ حال که تا اینجا را خوانده اید ادامه اش را نیز با ما بخوانید. مطمئنا خواندن یک تابع در زبان برنامه نویسی از خواندن درسهایتان جذاب تر است (نگارنده در حال خنده!). یک حقیقت نه چندان تلخ این است که هاسکل نمیتواند کتانژانت حساب کند. خب اینجا به یک حقیقت میرسیم « وقتی یک واحد زنده به محیط بیرون دسترسی ندارد، محیط بیرون به سمت آن می آید » .
تابع کتانژانت بسیار ساده است. هاسکل هم سینوس و کسینوس را محاسبه میکند و هم تانژانت را. بخاطر رابطه ساده ای که بین تانژانت و کتانژانت وجود دارد ، تابع را با استفاده از تانژانت مینویسیم :
Prelude> let cot(r) = 1/tan(r)
Prelude> cot(45)
0.6173696237835551
در خط اول به هاسکل فهماندیم که کتانژانت ، تقسیم عدد یک بر تانژانت است (گرچه میتوان از طریق سینوس و کسینوس هم این محاسبات را انجام داد). البته میتوانید امتحان هم بکنید ، امتحان ضرری ندارد. و سپس تانژانت و کتانژانت آن را در هم ضرب کنید (در r) یک متغیر را در نظر بگیرید (مثلا در اینجا همان صورتی تابع ما صحیح است که جواب ١ باشد)
Prelude> tan(30)*cot(30)
1.0
بله خوشبختانه کد ما درست بوده و حاصلضرب کتانژانت در تانژانت برابر با یک شده است. در بخش بعد در مورد نوشتن کد و سپس کامپایل آن صحبت خواهیم کرد.

نوشتن و کامپایل برنامه هاسکل

همانگونه که کد C را هم میتوانیم. برای نوشتن کد هاسکل (همانگونه که ابتدای مقاله ذکر شد) نیازی نیست تا حتما ادیتور بسیار
استفاده ( Xfce ادیتور پیشفرضمیزکار ) Leafpad پیشرفته ای داشته باشیم. بهرحال نگارنده ترجیح میدهد از
کند. چون در هاسکل کدها نیازی به رنگی شدن و خطایابی ندارند.
نکته : در کدهایی که مینویسیم نیازی به let برای تعریف تابع و متغیر نداریم.
استفاده کنیم. میخواهیم کد ساده ای را با هم نوشته و let خب همانطور که خواندید ، نیازی نیست که از
کامپایل کنیم. ابتدا یک داکیومنت خالی روی دسکتاپ ایجاد کرده ، آن را با ادیتور دلخواه باز میکنیم و سپس
کدهای زیر را داخلش مینویسیم :
f(x) = x^2
دارند hs آنرا ذخیر میکنیم. توجه کنید که سورسهای هاسکل همه پسوند function.hs و با نام
شده و تایپ میکنیم : ghci سپس وارد ترمینال و سپس
Prelude> :cd ~/Desktop/
Prelude> :load function.hs
میبرد و کد دوم برنامه را کامپایل میکند. پساز زدن دستور دوم چنین Desktop کد اول شما را به فولدر
صحنه ای پیش چشمان شما رخ میدهد :
[1 of 1] Compiling Main ( function.hs, interpreted )
Ok, modules loaded: Main.
*Main>
در حقیقت ماژولی است که برنامه از آن به جهت Main . تغییر میکند Main به Prelude از prompt و
مقدار بگذارید و نتیجه را ببینید : x کامپایل شدن استفاده کرده است. چرا بیکارید؟ کمی به جای
*Main> f(2)
4
*Main> f(3)
9
درست دیدید! برنامه با موفقیت کامپایل شد و نتیجه داد! این خود نشان میدهد که کد ما مشکلی نداشته
است. خب ، آیا اکنون کار دیگری با هاسکل داریم؟ شاید الان دیگر کاری نداشته باشیم. پس به سادگی تایپ
میکنیم :
*Main> :quit

خب تا اینجا حسابی با هاسکل سر و کله زده اید و حتما لذت تایپ دستورات هاسکل را درک کرده اید.

نویسنده:  محمدرضا حقیری - بهار ٩٢
۰ نظر موافقین ۰ مخالفین ۰
کتاب هسکل

کتاب هسکل

در اینجا چند کتاب با فرمت Pdf جهت دانلود رایگان در اختیار دانشجویان و دانش پژوهان قرار میدم. این کتب به زبان فارسی نیستند ولی بسیار کمک میکنن که به خوبی با این زبان شیرین آشنا بشیم.

1. آغاز با زبان برنامه نویسی هسکل (Beginning with the Haskell Programming Language)




2. برنامه نویسی تابعی (FunctionalProgramming)



3. Learn You a Haskell for Great Good!



4. برنامه نویسی موازی و همزمان در هسکل (Parallel and Concurrent Programming in Haskell)


۱ نظر موافقین ۰ مخالفین ۰
دانلود هسکل

دانلود هسکل

The Haskell Platform


For Windows
Windows
For Mac OSX
Mac
For Linux
Linux
۱ نظر موافقین ۰ مخالفین ۰
آموزش هسکل

آموزش هسکل

زبان Haskell هم یک زبان Functional خوب هست که هم میتونیم برای نوشتن برنامه های کاربردی(بیشتر برنامه هایی که با الگوریتم ها سر و کار دارند) به کار ببریمش هم به عنوان ماشین حساب ازش استفاده کنیم  .

برای این که در لینوکس ازش استفاده کنیم باید ghc رو نصب کنیم.

sudo apt-get install ghc

و خب نزدیک ۵۰ مگ دان میکنه و بعد نصب هم نزدیک ۲۰۰ مگ جا روی هارد میگیره.  خب برای شروع چی نیاز داریم؟ یک ادیتور متنی و یک ترمینال. خب ادیتور چی پیشنهاد میشه؟ حتی leafpad که در xfce موجوده هم کافیه براش ! . برای شروع به کار با این زبان ، کافیه که ghci رو اجرا کنیم تا بتونیم به عنوان یک ماشین حساب ازش استفاده کنیم:
ghci

و بعدش وارد شل خودش میشه. اینجا میتونید اینها رو تایپ کنید و نتیجه رو ببینید : (البته فکر کنم زوایا رو بر حسب گراد حساب میکنه) :

2+2
sin(45)
cos(30)
tan(60)
2*2^5
5^6
pi

و ببنید که چی به چیه. خب در اینجا هم دو مفهوم «عملگر» و «عملوند» رو داریم باز  عملگرها هم مثل سایر زبانهای برنامه نویسی هستند.

اولین و ساده ترین برنامه :

میخوایم یک برنامه بسازیم ، اونم برای چه کاری؟ محاسبه مساحت یک دایره  خب ابتدا باید یک ادیتور باز کنیم و بعدش :

متغیر تعریف میکنیم (r که معروفه  )

r = 2

و بعد باید یک تابع تعریف کنیم :

area = pi*r^2

یعنی سورس ما چنین شکلی خواهد داشت :

r = 2
area = pi*r^2


خب این رو به نام circle.hs در Desktop ذخیره میکنیم و ghci رو اجرا میکنیم ! بعدش چه کنیم؟ این کدها رو وارد میکنیم :


:cd ~/Desktop
:load circle.hs

بعدش چنانچه در شل جدید که  prompt اون Main هست، تایپ کنیم area مساحت رو نشونمون میده.


دریافت ورودی از کاربر و قرار دادن توی تابع :


بعضی وقتها پیش میاد که نیاز باشه کاربر یک ورودی به یک تابع بده و ازش خروجی تهیه کنه ، با روش قبلی تنها به این شکل بود که مثلا برای r مقدار ۵ یا هر چیز دیگری (از منفی بی نهایت تا مثبت بی نهایت) رو تعریف میکردیم و برنامه تنها یک خروجی داشت! اما حالا برنامه ای خواهیم نوشت که مقدار رو موقع load شدن از کاربر دریافت کنه !

کل کد ما به این شکل خلاصه میشه :

area r = pi*r^2

این کد رو در فایل circle.hs ذخیره میکنیم.
خب به شیوه قبلی با دستورات :cd و :load برنامه رو کامپایل میکنیم. حالا این ها رو تست کنید :

area 2
area 0.3
area 12

و ببنید چی دریافت میکنید ! البته تابع خالی رو دیگه نمیتونید بهش بدید !

حالا یک تمرین خودتون حل کنید :
یک برنامه برای محاسبه مساحت مثلث بنویسید!

نکته مهم : کدهایی که در پایین میان تفاوتهایی با هم دارند و لازم دونستم حتما بگم!

خب یک دایره داریم ، با شعاع ۸ ، حالا میخوایم به ۵+۳ بشکنیمش! در هاسکل کدش اینطور هست :

area (5+3)

و میخوایم به مساحت دایره با شعاع ۵ ، ۳ واحد ناقابل اضافه کنیم :

area 5+3

و میخوایم مساحت دو دایره مماس ، یکی با شعاع ۳ و دیگری ۵ رو با هم جمع کنیم (فرض کنید این دو دایره به هم چسبیدن! مثل مسائل مساحت راهنمایی  ).

area 3 + area 5

که البته چون عمل جمع هست ترتیب مهم نیست.

کد اول دارای پرانتز هست و این یعنی حتما برای اینکه ابتدا دو عدد جمع بشه و بعد سایر عملیات ها روش اعمال بشه نیاز به پرانتز داریم ، پرانتز در ریاضی بالاترین اولویت رو داره ، بعدش توان و رادیکال ، بعدش ضرب و تقسیم ، بعدش جمع و تفریق. اگر به دو اولویت مشابه ، مثلا ضرب و تقسیم پشت هم رسیدیم ، از سمت چپ اونی که جلوتر هست رو ابتدا انجام میدیم. کامپیوتر هم همین کار رو میکنه.

کد دوم ابتدا مساحت رو حساب میکنه ، بعدش مقدار بعد علامت + رو به مساحت اضافه میکنه، چرا؟ چون فرمول مساحت دارای توان و ضرب هست که طبعا اولویت های بالاتری دارند

کد سوم هم که دو مساحت رو جداگانه حساب میکنه و در نهایت ، اونها رو با هم جمع کرده و به ما نشون میده. برای تفریق و ضرب و تقسیم و ... هم به همین شکل عمل کنید.


خب یک خبر بد! هاسکل کتانژانت حساب نمیکند! اما برای محاسبه کتانژانت کافیست که یک تابع کتانژانت براش تعریف کنیم. برای محاسبه کتانژانت دو راه هست :
۱- تقسیم عدد یک بر تانژانت
۲- تقسیم کسینوس بر سینوس

چون هاسکل ، امکان محاسبه تانژانت رو داره ، میتونیم همون فایل circle.hs رو ویرایش کنیم و یک تابع جدید براش بنویسیم :

cot(r) = 1/tan(r)

و بعد اون کد رو اجرا کنیم ! (روش اجرا در بالا توضیح داده شد!) .

خب این بار میخوایم بریم سراغ کامپایل برنامه از سورس  .

برای نوشتن سورس اول مثال همیشگی Hello World رو مینویسیم (در یک فایل به نام HelloWrold.hs) .

main = putStr("Hello World!\n")

توضیح:
main ماژول اصلی هست که کامپایلر ازش استفاده میکنه. putStr هم که مشخصه! برای نمایش داده از نوع String به کار میره. دستورات backslash هم اینجا هستند (همه جا هستند  ) .

خب فایل رو Save میکنیم و بعد بدین شکل کامپایل مینماییم :

haskell-compiler HelloWorld.hs

یک نمونه پیشرفته تر از همین کد که اسمتون رو میگیره و بهتون سلام میکنه :

main = putStrLn "Waht's your name?">>
            getLine>>= \ name ->
            putStr("Hello, " ++ name ++ "!\n")

این رو هم کامپایل کنید تا به قدرت هسکل در این زمینه هم پی ببرید.


عملگرهای منظقی :


خب یکم چاشنی منطق به کارمون اضافه نکنیم عایا؟  .

اینجا هم عملگرهای منطقی مثل && و || وجود دارند. عملگرهای منطقی، تفاوتی با عملکردها حسابی دارند. تفاوتهای عمده این دو عملگر در این هست که عملگر حسابی، یک مقدار با مقدار دیگر محاسبه میکنه (۴ عمل اصلی) و عملگر منطقی ، اونها رو با هم مقایسه میکنه.
قبل از توضیح بیشتر، بیایم یکم عملگر بازی کنیم  . این عملگر بازی سادست. تنها کافیه که ghci را باز نموده و خروجی این دستورات رو بررسی کنیم :

True && True

و یا
True && False

و یا
True || False



خب عملگرهای منطقی، عدد این چیزا حالیشون نیست    و فقط True و False (یا بهتره بگیم صفر و یک ) میفهمند.

عملگر && به معنای AND و عملگر || به معنای OR هست.

۰ نظر موافقین ۰ مخالفین ۰
هسکل چیست؟

هسکل چیست؟

هسکل (به انگلیسی: Haskell) یک زبان برنامه نویسی تابعی خالص و کارآمد با معانی ساده می‌باشد که به نام منطق دانی به نام هسکل کاری نام گذاری شده است.
اهداف این زبان به شرح زیر می‌باشد:
هسکل یک زبان برنامه نویسی پیشرفتهٔ کاملاً کارآمد و یک محصول متن باز است که حاصل بیش از بیست سال پیشرفت و تحقیق می‌باشد که اجازهٔ توسعه سریع و پیاپی سالم و مختصر و صحیح نرم‌افزار را می‌دهد با پشتیبانی قوی از یکپارچه سازی با سایر زبان‌ها، همزمانی داخلی ساختمانی و موازی کار کردن و پیدا کردن باگ‌ها در سورس برنامه و پروفایلر و کتابخانهٔ غنی و ساخت نرم‌افزار قابل انعطاف و قابل نگهداری با کیفیت بالا را ساده می‌کند.

تاریخچه

پس از عرضهٔ زبان برنامه نویسی میراندا توسط شرکت انگلیسی Research Software Ltd در سال ۱۹۸۵ علاقه به زبان‌های اصلی کند افزایش پیدا کرد. در سال ۱۹۸۵ بیش از دو زبان برنامه نویسی خالص و کارآمد با معانی ساده وجود داشت. بین این زبان نشستی برگزار شد که در طی آن شرکت کننده‌ها به توافق قطعی رسیدند که یک کمیته باید شکل بگیرد که وظیفهٔ آن تعریف استانداردهای بازی برای زبان‌های این چنینی باشد این کار با هدف صریح یکی کردن زبان‌های موجود به یک زبان مشترک به کار می‌رود، به منظور ایجاد پایه‌ای تحقیقات آیندگان در طراحی زبان انجام شد اولین نسخهٔ زبان در سال ۱۹۹۰ نتیجهٔ تلاش‌های کمیته در سری تعاریف زبان در اواخر ۱۹۹۸ به حد اعلی رسید، که بر آن بود که یک نسخهٔ زبان پایدار، کوچک و قابل حمل که یک کتابخانه استاندارد برای تدریس ضمیمه آن بود و همچنین پایه‌ای برای تکامل‌ها در آینده باشد، را تعیین کند کمیته صریحاً از به وجود آمدن تکامل‌های اضافی و مغایر با از راه اضافه کردن و بهم پیوستن طرح‌های تجربی استقبال کرد.

در ژانویهٔ ۱۹۹۹ استانداردهای زبان به صورت نسخهٔ معتبر و اصلی با نام Haskell 98 Language and Libraries: The Revised Report منتشر شد یک نسخهٔ اصلاح شده با نام منتشر شد به خاطر پیاده‌سازی استاندارد حال حاضر را به نمایش می‌گذارد، این زبان به نمو پیاپی خود ادامه می‌دهد در اوایل سال فرایند تعریف کردن جانشین برای نسخهٔ استاندارد که به طور غیر رسمی نام گرفته است، شروع شده است این فرایند اقدام به ساخت نسخهٔ فرعی کرده است تکامل‌ها و خصیصه‌ها خصیصهٔ بارز زبان هسکل شامل تطبیق الگو، قوهٔ ادراک به صورت لیست، حائل‌ها، عملگرهای قابل تعریف و تک گماری است زبان همچنین قابلیت پشتیبانی از تابع‌های بازگشت پذیر و انواع داده‌های جبری را به خوبی ارزیابی کند را دارد فکرهای بی همتا شامل یکه‌ها و کلاس‌های الگو می‌باشد ترکیب این خصیصه‌ها می‌تواند توابعی بسازد که نوشتن آن بوسیلهٔ زبان‌های برنامه نویسی روندی دشوار است اما انجام آن در زبان جزئی و آسان می‌باشد چندین گونهٔ مغایر توسعه پیدا کرده، از جمله نسخهٔ موازات شده از ام ای تی وگلس گو بیشتر نسخه‌های موازی و توزیع شده نامیده می‌شدند نسخهٔ ارزیابی مبتکرانه ادن نامیده شد و چندین نسخهٔ شیئ گرا نامیده می‌شوند. خویشاوند نزدیکی به کنکورنت کلین می‌باشد که بزرگترین انحراف از در استفاده از گونه‌های یکتایی برای ورودی به جای یکه‌ها می‌باشد.

کاربردها

قدرت هسکل به خوبی برای بعضی از پروژه‌ها به کار بسته شده است این زبان به طور زیاد شونده درموقعیت‌های ارتباطی به کار برده می‌شود. Audrey Tang's Pugs پیاده‌ساز برای آیندهٔ دور زبان پرل شش که دارای مفسر و کامپایلر می‌باشد که کارامد بودن آن را بعد از چند ماه بیرون آمدن آن اثبات کرده است؛ به طور مشابه، جی اچ سی معمولاً برای خصیصهٔ برنامه نویسی پیشرفتهٔ تابعی و بهینه‌سازی آزمایش می‌شود دارس یک سیستم کنترل تجدید نظرهمراه چندین خصیصهٔ ابتکاری است. لینوکس زبان هسکل را برای توسعهٔ ابزار سیستم انتخاب کرده است. ایکس مناد که یک مدیریت پنجره برای سیستم پنجره ایکس می‌باشد، به طور کلی با هسکل نوشته شده است. بلو اسپیس سیستم وریلوگ یک زبان برای طراحی نیمه هادی می‌باشد که تکاملی از می‌باشد به علاوه. بلو اسپیس ای ان سی ابزار در زبان انجام شده است.
۰ نظر موافقین ۰ مخالفین ۰