انجمن‌های فارسی اوبونتو

کمک و پشتیبانی => برنامه‌سازی => نویسنده: محمدرضا ح. در 08 فروردین 1392، 11:12 ب‌ظ

عنوان: Haskell را با هم یاد بگیریم! (دستورات شرطی)
ارسال شده توسط: محمدرضا ح. در 08 فروردین 1392، 11:12 ب‌ظ
سلام به همه دوستان اوبونتویی .

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




وبسایت رسمی : http://haskell.org
ویکیپدیای پارسی : http://fa.wikipedia.org/wiki/%D9%87%D8%B3%DA%A9%D9%84_%28%D8%B2%D8%A8%D8%A7%D9%86_%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87%E2%80%8C%D9%86%D9%88%DB%8C%D8%B3%DB%8C%29

برای این که در لینوکس ازش استفاده کنیم باید 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 که معروفه :D)

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 هم اینجا هستند (همه جا هستند ;D) .

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

haskell-compiler HelloWorld.hs
یک نمونه پیشرفته تر از همین کد که اسمتون رو میگیره و بهتون سلام میکنه :

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


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

ان شاء الله بزودی وارد مباحث پیشرفته تر هسکل خواهیم شد، و مواردی رو بیشتر فرا خواهیم گرفت تا بتونیم برنامه های کاربردی تری بنویسیم :) .

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

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

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

True && True
و یا

True && False

و یا

True || False



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

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

دستورات شرطی

دستورات شرطی، مهم ترین بخش زبانهای برنامه نویسی به شمار میان، چون با استفاده از اونها، میشه ورودی ها و خروجی های برنامه رو کنترل کرد و به نتیجه دلخواه رسید. هسکل هم شروط بسیار خوبی داره.
شکل کلی دستور شرطی در هسکل، این هست :
if <condition> then <true_value> else <false_value>
و البته else if هم در این زبان هست، که استفاده اش به این شکله :

if <condition1>
then <true_value1>
    else if <condition2>
    then <true_value2>
else <false value>


و طبیعتا، میتونید به هر تعدادی که دلتون میخواد else if استفاده کنید.

یک نمونه کد عملیاتی از if then else :

if x == 1 then putStrLn("True") else putStrLn("False")
این کد، موقعی که متغیر x مقداری برابر عدد یک رو دریافت کنه، عبارت «True» و در صورتی که عددی غیر از یک باشه، «False» رو بر میگردونه. البته به روش else if هم میشه آپشن های بیشتری براش در نظر گرفت، مثلا اگر بزرگتر از یک باشه چه کار کنه، اگر کوچکتر باشه چه کار کنه و اگر هیچکدوم از شرایط داده شده رعایت نشد، چه کنه.
اما مثال بهتر از else if مثالی هست که در یکی از منابع (http://en.wikibooks.org/wiki/Haskell/) مورد مطالعه پیدا کردم :
describeLetter :: Char -> String
describeLetter c =
    if c >= 'a' && c <= 'z'
        then "Lower case"
        else if c >= 'A' && c <= 'Z'
            then "Upper case"
            else "Not an ASCII letter"

این یک تابع هست و وظیفه داره تا کوچک و بزرگ بودن حروف رو تعیین کنه. همچنین، اگر ورودی از نوع حروف اسکی نباشه، مقداری که مقابل else تعریف شده، برگردونده میشه.
عنوان: پاسخ : Haskell را با هم یاد بگیریم!
ارسال شده توسط: سید مسعود امامیان در 08 فروردین 1392، 11:22 ب‌ظ
تشکر ولی برای کارهای روزمره :
man bc
کافی است.
عنوان: پاسخ : Haskell را با هم یاد بگیریم!
ارسال شده توسط: محمدرضا ح. در 08 فروردین 1392، 11:25 ب‌ظ
تشکر ولی برای کارهای روزمره :
man bc
کافی است.

بله bc خیلی خوبه. البته این آموزش هاسکل ادامه داره ;) کتابش رو میخونم و سعی میکنم مطالبش رو خلاصه و به زبون ساده تر اینجا بیان کنم. همون پست اول رو هم بروز میکنم :).

این زبان تقریبا مشابه R هست.
عنوان: پاسخ : Haskell را با هم یاد بگیریم!
ارسال شده توسط: nixoeen در 08 فروردین 1392، 11:27 ب‌ظ
زبان Haskell هم یک زبان کاربردی خوب هست
تنها یک توضیح که Haskell یک زبان کاربردی نیست، بلکه یک زبان Functional هست، ولی خوب برای کسایی که رشته‌هایی مثل ریاضی یا علوم کامپیوتر می‌خونن و روی الگوریتم‌ها کار می‌کنند، زبان مناسبی هستش.
عنوان: پاسخ : Haskell را با هم یاد بگیریم!
ارسال شده توسط: محمدرضا ح. در 08 فروردین 1392، 11:28 ب‌ظ
زبان Haskell هم یک زبان کاربردی خوب هست
تنها یک توضیح که Haskell یک زبان کاربردی نیست، بلکه یک زبان Functional هست، ولی خوب برای کسایی که رشته‌هایی مثل ریاضی یا علوم کامپیوتر می‌خونن و روی الگوریتم‌ها کار می‌کنند، زبان مناسبی هستش.

ممنون. این Functional رو کاربردی معنی کردم. فکر کنم خودش رو بنویسم بهتر باشه ;)
عنوان: پاسخ : Haskell را با هم یاد بگیریم!
ارسال شده توسط: nixoeen در 08 فروردین 1392، 11:40 ب‌ظ
ممنون. این Functional رو کاربردی معنی کردم. فکر کنم خودش رو بنویسم بهتر باشه ;)
ترجمه صحیح اون می‌شه زبان برنامه‌نویسی تابعی. (لینک (http://fa.wikipedia.org/wiki/%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87%E2%80%8C%D9%86%D9%88%DB%8C%D8%B3%DB%8C_%D8%AA%D8%A7%D8%A8%D8%B9%DB%8C))
عنوان: پاسخ : Haskell را با هم یاد بگیریم!
ارسال شده توسط: afrod در 08 فروردین 1392، 11:42 ب‌ظ
function به معنی تابع است.
applied به معنی کاربردی گرفته میشه

آپدیت:‌عذر می خوام. تکراری شد.

ترجمه صحیح اون می‌شه زبان برنامه‌نویسی تابعی. (لینک)
ترجمه خوبی نیست
عنوان: پاسخ : Haskell را با هم یاد بگیریم!
ارسال شده توسط: محمدرضا ح. در 08 فروردین 1392، 11:43 ب‌ظ
ممنون. این Functional رو کاربردی معنی کردم. فکر کنم خودش رو بنویسم بهتر باشه ;)
ترجمه صحیح اون می‌شه زبان برنامه‌نویسی تابعی. (لینک (http://fa.wikipedia.org/wiki/%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87%E2%80%8C%D9%86%D9%88%DB%8C%D8%B3%DB%8C_%D8%AA%D8%A7%D8%A8%D8%B9%DB%8C))

ممنون :) کلی به اطلاعاتم در مورد برنامه نویسی اضافه شد :D

function به معنی تابع است.
applied به معنی کاربردی گرفته میشه

آپدیت:‌عذر می خوام. تکراری شد.

تقصیر کتاب زبان هست که Language Functions رو «کاربردهای زبان» ترجمه کرده. (زبان دبیرستان :|)
عنوان: پاسخ : Haskell را با هم یاد بگیریم!
ارسال شده توسط: nixoeen در 08 فروردین 1392، 11:55 ب‌ظ
ترجمه صحیح اون می‌شه زبان برنامه‌نویسی تابعی. (لینک)
ترجمه خوبی نیست
من فکر کنم ترجمه خوبی باشه، چون دقیقا نوع این زبان رو مشخص می‌کنه. ترجمه بهتری سراغ دارید؟
عنوان: پاسخ : Haskell را با هم یاد بگیریم!
ارسال شده توسط: محمدرضا ح. در 09 فروردین 1392، 12:00 ق‌ظ
function به معنی تابع است.
applied به معنی کاربردی گرفته میشه

آپدیت:‌عذر می خوام. تکراری شد.

ترجمه صحیح اون می‌شه زبان برنامه‌نویسی تابعی. (لینک)
ترجمه خوبی نیست

این زبان با توابعش زندست :D . حتی ساده ترین مثال (مساحت دایره) هم نوعی مفهوم تابع رو در بر داره و area اینجا یک تابع است. به نظرم بهتر بود مبانی رایانه سوم رو با این زبان آموزش میدادن چون از بیسیک بیشتر بدرد رشته ریاضی میخوره.
عنوان: پاسخ : Haskell را با هم یاد بگیریم!
ارسال شده توسط: سید مسعود امامیان در 09 فروردین 1392، 12:02 ق‌ظ

ترجمه صحیح اون می‌شه زبان برنامه‌نویسی تابعی. (لینک)
ترجمه خوبی نیست

با عرض معذرت آقای حقیری.

ممنون می‌شوم درفا خانوم من رو با معنی درست این واژه آگاه کنید.

معمولا زبان‌های برنامه نویسی را به 4 دسته تقسیم می کنند :

OO : شی گرا مانند سی++
procedural : رویه‌ای مانند سی
Declarative : اعلانی مانند SQL
Functional : تابعی مانند همین Haskell
در دسته‌ی «تابعی»، برنامه به مجموعه‌ای از توابع تقسیم می شود. به طور کلی، در مقابل ورودی ها، خروجی داریم. زبان‌هایی مانند ML و Haskell به همین صورت هستند.
معنی این واژه، با خاطر خاصیت این نوع زبان‌ها، به نظرم بهترین به نظر می رسد .


عنوان: پاسخ : Haskell را با هم یاد بگیریم!
ارسال شده توسط: علی نعمت اللهی در 09 فروردین 1392، 12:05 ق‌ظ
function به معنی تابع است.
applied به معنی کاربردی گرفته میشه

آپدیت:‌عذر می خوام. تکراری شد.

تقصیر کتاب زبان هست که Language Functions رو «کاربردهای زبان» ترجمه کرده. (زبان دبیرستان :|)
دقیقا کجاش این معنی نوشته شده؟
عنوان: پاسخ : Haskell را با هم یاد بگیریم!
ارسال شده توسط: محمدرضا ح. در 09 فروردین 1392، 12:06 ق‌ظ
function به معنی تابع است.
applied به معنی کاربردی گرفته میشه

آپدیت:‌عذر می خوام. تکراری شد.

تقصیر کتاب زبان هست که Language Functions رو «کاربردهای زبان» ترجمه کرده. (زبان دبیرستان :|)
دقیقا کجاش این معنی نوشته شده؟
احیانا راهنمای دروس نداری؟
عنوان: پاسخ : Haskell را با هم یاد بگیریم!
ارسال شده توسط: nixoeen در 09 فروردین 1392، 12:32 ق‌ظ
به نظرم بهتر بود مبانی رایانه سوم رو با این زبان آموزش میدادن چون از بیسیک بیشتر بدرد رشته ریاضی میخوره.
تا جایی که من از دوستانی که از ایران اومدند شنیدم، حتی توی دانشگاه هم خیلی به زبان‌های تابعی توجهی نمی‌شه، در حالی که ما توی دانشگاه اولین زبانی که بهمون تدریس کردند ML بود.

چون Basic و Haskell هر کدوم کاملا روش فکر متفاوتی پشتشون هست، من خودم نمی‌تونم با اطمینان بگم که کدوم می‌تونه گزینه بهتری برای دانش‌آموزها باشه. از بعضی لحاظ‌ها Basic بهتره (برای فهم بهتر نحوه کار کامپیوتر) و از بعضی لحاظ‌ها Haskell (برای فهم بهتر ریاضی به کار رفته در الگوریتم‌ها)
عنوان: پاسخ : Haskell را با هم یاد بگیریم!
ارسال شده توسط: محمدرضا ح. در 09 فروردین 1392، 12:34 ق‌ظ
به نظرم بهتر بود مبانی رایانه سوم رو با این زبان آموزش میدادن چون از بیسیک بیشتر بدرد رشته ریاضی میخوره.
تا جایی که من از دوستانی که از ایران اومدند شنیدم، حتی توی دانشگاه هم خیلی به زبان‌های تابعی توجهی نمی‌شه، در حالی که ما توی دانشگاه اولین زبانی که بهمون تدریس کردند ML بود.

چون Basic و Haskell هر کدوم کاملا روش فکر متفاوتی پشتشون هست، من خودم نمی‌تونم با اطمینان بگم که کدوم می‌تونه گزینه بهتری برای دانش‌آموزها باشه. از بعضی لحاظ‌ها Basic بهتره (برای فهم بهتر نحوه کار کامپیوتر) و از بعضی لحاظ‌ها Haskell (برای فهم بهتر ریاضی به کار رفته در الگوریتم‌ها)

خب ویژوال بیسک و بیسیک هم که به ما یاد میدن (البته معلم جبر و مبانی یکی هست و مبانی درس نمیده :P) فکر میکنید چی هست؟ سخت سختش تکست ادیتور هست که فکر نکنم برای رشته ریاضی برنامه مناسبی باشه. چون فعلا درگیر محاسبات هستیم :) و

-----

پست اول بروز شد!
عنوان: دستورات شل GHCi
ارسال شده توسط: محمدرضا ح. در 09 فروردین 1392، 06:17 ب‌ظ
پست اول بروز گشت و روش محاسبه کتانژانت اضافه شد.

-------

خب ، اما شما نیاز دارید بدونید که چه چیزهایی لازمه برای شل هاسکل بدونیم؟ چه دستوراتی اینجا خیلی کاربرد دارند؟ چند دستور هست که مشابه شل ترمینال هستند ، اما روش بکار گیریشون متفاوته :

:cd
برای تغییر دایرکتوری استفاده میشه.

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

:quit
برای خروج از ghci ازش استفاده میکنند.


عنوان: پاسخ : Haskell را با هم یاد بگیریم! (محاسبه کتانژانت اضافه شد!)
ارسال شده توسط: کیان در 10 فروردین 1392، 02:05 ب‌ظ
ترجمه بی سروتهی با اضافات خودم از مقدمه کتاب Learn You a Haskell for Great Good, 2011 (https://torrents.thepiratebay.se/6766825/Learn_You_a_Haskell_for_Great_Good_-_Lipovaca_-_No_Starch_(2011).6766825.TPB.torrent) (نسخه آنلاین کتاب (http://learnyouahaskell.com/chapters))

هسکل سرگرمیه و این چیزیه که دربارش میتونم بگم!
یادگیری هسکل برای کسی که تجربه برنامه نویسی با پایتون، جاوا، ++C وووو داره ساده تره. اگر تا حالا برنامه نویسی نکردید ولی یک شخص باهوش هستید شرط می بندم (Miran Lipovaca شرط می بنده!) می تونید بشینید و هسکل یاد بگیرید. (واو! هسکل به عنوان اولین زبان برنامه نویسی تون؛ بعدا به خودتون افتحار می کنید :D)
در اولین برخوردم با هسکل، زبان خیلی عجیبی در نظرم اومد، اما بعد از رد شدن از این مانع اولیه، همه چی آرومه، من چقدر خوشبختم! اگر با هسکل در ابتدای یادگیری احساس غربت میکنید، بی خیالش نشید: یادگیری هسکل مثل یادگیری برنامه نویسی برای اولین باره! باحاله و مجبورتون میکنه طور دیگه ای فکر کنید.

(http://uploadtak.com/images/c9169_7381fxmath.jpg)
هسکل چیه؟
هسکل یک زبان برنامه نویسی تابعی خالصه. در زبانی مثل Python  دنباله ای از وظایف رو به کامپیوتر می دید و کامپیوتر اونها رو اجرا میکنه. و در حین اجرای کد، کامپیوتر می تونه وضعیت رو تغییر بده. مثلا شما مقدار a = 5 رو تعریف می کنید و بعد از یکسری عملیاتی که انجام میدید (a = a+۱)، ممکنه مقدار a تغییر کنه. همچنین ساختارهایی مثل حلقه های while  و for وجود داره تا بشه یک دستورالعمل رو چندین بار اجرا کرد.
اما برنامه نویسی تابعی خالص طور دیگه ای کار میکنه. به کامپیوتر نمیگید چی انجام بده، بلکه چیزی رو براش تعریف میکنید. مثلا می تونید بهش بگید که فاکتوریل یک عدد یعنی ضرب همه اعداد صحیح از یا تا عدد موردنظر و به عنوان یک تابع توصیفش کنید. در برنامه نویسی تابعی نمی تونید یک متغییری رو که تعریف کردید، بعدا به چیز دیگه تغییر بدید. اگر a=5 برای همیشه a=5
هسکل تنبله: هسکل توابع رو تا زمانی که نیاز نباشه که به شما نتیجه ای رو نمایش بده، اجرا نمی کنه (حداقل محاسبه تا جواب)!

چی نیاز دارید تا شیرجه برید؟
نصب حداقلی: ادیتور متنی + کامپایلر. ادیتورتون هر چی بود، بود! برای کامپایلر هم از GlasgowHaskell Compiler=GHC می تونید استفاده کنید که محبوبترین کامپایلر هسکله.
نصب کامل: Haskell Platform (http://hackage.haskell.org/platform/)


مقالات دیگه:
http://tinyurl.com/hask3l
http://tinyurl.com/bsm7gcn

چند زبان برنامه نویسی تابعی دیگه:
LISP  اولین زبان برنامه نویسی تابعی است (1958) که با استفاده از لیستهای پیوندی (Linked List) به عنوان ساختار مرکزی دادهها ابداع شد.  پراستفاده ترین نسخه های LISP Common ، LISP و Schema هستند.
 ML که برگرفته از  Language Meta است، یک زبان برنامه نویسی تابعی با دامنه  ایستا (Static) است و تفاوت اصلی اش با زبان LISP در Syntax یا همون گرامرشه. شبیه زبان برنامه نویسی پاسکال است
#F (http://barnamenevis.org/showthread.php?230433-%D8%A7%D8%B4%D9%86%D8%A7%DB%8C%DB%8C-%D8%A8%D8%A7-%D8%B2%D8%A8%D8%A7%D9%86-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%86%D9%88%DB%8C%D8%B3%DB%8C-F-%D9%82%D8%B3%D9%85%D8%AA-%D8%A7%D9%88%D9%84)، اف شارپ یک زبان برنامه نویسی شامل برنامه نویسی تابعی و برنامه نویسی شی گرای دستوری است که در چهارچوب Net. فعالیت میکنه. شاخه ای از ML بوده و بسیار با OCAML سازگاره.
عنوان: Haskell is like that girl
ارسال شده توسط: کیان در 12 فروردین 1392، 11:41 ب‌ظ
لینک مستقیم دانلود کتاب معرفی شده در پست قبل: http://learnyouahaskell.com/learnyouahaskell.pdf

طرحی برای یادگیری هسکل: http://web.archive.org/web/20100416040111/http://www.alpheccar.org/en/posts/show/67

مطلبی انتقادی درباره هسکل:
http://www.xent.com/pipermail/fork/Week-of-Mon-20070219/044101.html

اگر اینترنت رو سرچ کنید می بینید که جبهه گیریهای زیادی بین طرفداران و مخالفان هسکل (برنامه نویسی تابعی) وجود داره.

نسخه آنلاین کتاب real world haskell از انتشارت اوریلی: http://book.realworldhaskell.org/read/
راهنمای با مزه هسکل: http://www.lisperati.com/haskell/hasktut.pdf
آموزش آنلاین: http://tryhaskell.org/
99 تا تمرین: http://www.haskell.org/haskellwiki/H-99:_Ninety-Nine_Haskell_Problems
چقدر تمرین؟ http://projecteuler.net/index.php?section=problems
۲۰ تمرین سطح متوسط:‌ http://blog.tmorris.net/20-intermediate-haskell-exercises/
ویکی هسکل: http://www.haskell.org/haskellwiki/How_to_write_a_Haskell_program
یک مقاله خواندنی: http://pragprog.com/magazines/2012-08/thinking-functionally-with-haskell
جستجوی کتابخانه های هسکل: http://www.haskell.org/hoogle/
عنوان: کتابچه معرفی و آشنایی Haskell
ارسال شده توسط: محمدرضا ح. در 15 فروردین 1392، 01:39 ق‌ظ
دوستان این هم کتابچه معرفی و آشنایی با هاسکل :

http://iran-bsd.ir/showthread.php?tid=309

با LaTeX نوشتم و وقت زیادی ازم گرفت. ممنون میشم فیدبک بدید.
عنوان: پاسخ : Haskell را با هم یاد بگیریم! (محاسبه کتانژانت اضافه شد!)
ارسال شده توسط: سلمان م. در 15 فروردین 1392، 02:03 ق‌ظ
خیلی کارت خوب بود. لذت بردم.
اگه راهت رو درست تشخیص بدی، می‌تونی به موفقیت‌های جهانی برسی.
عنوان: پاسخ : کتابچه معرفی و آشنایی Haskell
ارسال شده توسط: nixoeen در 15 فروردین 1392، 02:45 ق‌ظ
ممنون میشم فیدبک بدید.
خوب به نظر من شاید مفیدترین کاری بوده که تا الان کردی. به صورت کامل نخوندم ولی این‌ها چیزهایی هست که به نظرم می‌رسه.

در مورد تلفظ Haskell، کلمه هسکل مناسب‌تر هستش. تلفظ Haskell به صورت /ˈhæskəl/ هستش و æ بیشتر صدای -َ داره تا صدای ا. (لینک (http://en.wikipedia.org/wiki/Haskell_%28programming_language%29))

در مورد امضا، اضافه کردن لفظ‌های عربی مثل «و من الله التوفیق» با توجه به تاریخچه شروع انجام این کار، بیشتر یک حرکت سیاسی بوده (و هست!) که عموما با هدف نشون دادن التزام اعتقادی و ... (و گاها سیاه‌نمایی) انجام می‌شده (و میشه!). شاید بهتر باشه ما خودمون رو قاطیش نکنیم! حتی این‌ها هم که در نظر نگیریم، بعد از ۱۰ صفحه فارسی نوشتن یک دفعه یک جمله به عربی نوشتن برای امضا کمی مسخره هستش.
عنوان: پاسخ : Haskell را با هم یاد بگیریم! (محاسبه کتانژانت اضافه شد!)
ارسال شده توسط: کیان در 15 فروردین 1392، 11:00 ق‌ظ
اگه راهت رو درست تشخیص بدی، می‌تونی به موفقیت‌های جهانی برسی.
دروغ سیزده!

ممنون میشم فیدبک بدید.
درخواست خودت برای فیدبک و نظرات عجیبه بقیه من رو که تصمیم گرفته بودم سکوت کنم به حرف میاره:
1. با این پست اسپمت تاپیک آموزشی خودت رو خراب کردی  ::)
2. برعکس nixoeen، به نظر من این کارت یکی از بدترین کارهایی بوده که تا حالا کردی! از کوبی بورد بگیر تا همین هسکل. هر هفته یک رنگ جدید گرفتی و یک کار تازه شروع کردی!
3. کامل خوندم. قلمت ضعیف بود. اگر منابعی رو می خونی و یا قبلا خوندی (در هر زمینه ای از کامپیوتر) از این به بعد لازمه در کنار نگاه فنی، به نگارش متنی که میخونی هم دقت کنی تا قواعد نوشتن ملکه ذهنت بشه! من پیشنهاد می کنم ترجمه یک کتاب رو شروع کنی fبه جای اینکه تجربه خودت رو در این سطح بنویسی!
4. می تونستی لینک پی دی اف رو مستقیم بذاری به جای اینکه مجبورمون کنی یک راه اضافی بریم!
5. اولین بخش متن نشون دادی که هنوز درک درستی از هسکل نداری: "هسکل برای پردازش روی اعداد ساخته شده است"
6. متن رو برای کی نوشتی؟‌برای کاربرهای اوبونتو؟ خیلی ها ممکنه ندونند nano چیه!
7. بخش هسکل چه ویژگی هایی دارد باید توسعه پیدا کنه
8. برای نوشتن بخش «چه زبانهای دیگری عملکردی مشابه هاسکل دارند» باید بیشتر مطالعه کنی! کجا خوندی متلب و هسکل شیوه کارشون یکیه؟
9. لازم نیست تو متن اشاره کنی که مانند سایر محیطها (مثل MATLAB) این محیط هم فلان ویژگی رو داره. با این کار در نظر خواننده از قدرت ابزاری که معرفی میکنی کم می کنی
10. بخش پایان مطلب رو هم nixoeen توضیح دادند.
عنوان: پاسخ : Haskell را با هم یاد بگیریم! (محاسبه کتانژانت اضافه شد!)
ارسال شده توسط: keshavarz2440 در 15 فروردین 1392، 03:51 ب‌ظ
ممنون عزیز هم پست اولت عالی بود هم کتابچت.
یه نظر : حتی نظرات کودکانه و گاها از سرکینه و عقده رو هم جدی بگیر ;)
عنوان: پاسخ : Haskell را با هم یاد بگیریم! (محاسبه کتانژانت اضافه شد!)
ارسال شده توسط: سلمان م. در 15 فروردین 1392، 04:13 ب‌ظ
لطفاً از ارسال پست‌هایی بحث برانگیز خودداری کنید.
عنوان: پاسخ : Haskell را با هم یاد بگیریم! (محاسبه کتانژانت اضافه شد!)
ارسال شده توسط: آرمان اسماعیلی در 15 فروردین 1392، 05:25 ب‌ظ
مثل اینکه از بس همه به قصد تخریب انتقاد کرده‌اند، دیگه مفهوم «انتقاد سازنده» از ذهن ملت پاک شده!
عنوان: نسخه جدید کتابچه Haskell اضافه شد
ارسال شده توسط: محمدرضا ح. در 19 فروردین 1392، 06:55 ب‌ظ
نسخه جدید کتابچه اضافه شد! .

http://iran-bsd.ir/showthread.php?tid=309&action=lastpost

در این نسخه ظاهر کتابچه بهتر شده و در فهرست مطالب چنانچه روی یکی از عناوین کلیک کنید به بخش مربوطه هدایت میشید. (این است قدرت زی پرشین ;D ) .
عنوان: چند IDE برای هسکل
ارسال شده توسط: محمدرضا ح. در 02 اردیبهشت 1392، 05:11 ب‌ظ
http://www.haskell.org/haskellwiki/Haskell_IDE
عنوان: پاسخ : Haskell را با هم یاد بگیریم! (محاسبه کتانژانت اضافه شد!)
ارسال شده توسط: fzerorubigd در 03 اردیبهشت 1392، 12:18 ق‌ظ
تنها نکته ای که میتونم بگم اینه که برخلاف تصور هاسکل کاملا هم میتونه کاربردی باشه، مثلا xmonad با همین زبان نوشته شده. در حقیقت حتی زبان brainfuck هم میتونه کاربردی باشه به شرطی که مفهوم کاربرد رو بتونی درست براش تعریف کنی.
عنوان: پاسخ : Haskell را با هم یاد بگیریم! (کامپایل برنامه از سورس!)
ارسال شده توسط: محمدرضا ح. در 31 اردیبهشت 1392، 01:43 ب‌ظ
کامپایل برنامه  از سورس + دو مثال putStr افزوده شد!
عنوان: پاسخ : Haskell را با هم یاد بگیریم! (کامپایل برنامه از سورس!)
ارسال شده توسط: محمدرضا ح. در 29 خرداد 1392، 09:37 ب‌ظ
پست اول بروز و عملگرهای منطقی اضافه شد!
عنوان: پاسخ : Haskell را با هم یاد بگیریم! (کامپایل برنامه از سورس!)
ارسال شده توسط: محمدرضا ح. در 04 دی 1393، 09:54 ب‌ظ
خب دوستان عزیز این مدت زیاد نبودم و این تاپیک آپدیت نشد.

سعی میکنم این تاپیک رو بروز کنم، چون بخش زیادی از آموزش جلو رفته، و حیفه که دنبال نشه. یک نظرسنجی هم ایجاد میکنم، که ببینم چقدر با وجود چنین آموزشی موافقید :)
عنوان: پاسخ : Haskell را با هم یاد بگیریم! (کامپایل برنامه از سورس!)
ارسال شده توسط: mohsen-rashidi در 04 دی 1393، 10:39 ب‌ظ
خب دوستان عزیز این مدت زیاد نبودم و این تاپیک آپدیت نشد.

سعی میکنم این تاپیک رو بروز کنم، چون بخش زیادی از آموزش جلو رفته، و حیفه که دنبال نشه. یک نظرسنجی هم ایجاد میکنم، که ببینم چقدر با وجود چنین آموزشی موافقید :)

این نظرسنجی عبثِ. چون آموزش مطالب علمی همیشه مفیده.
ضمنا بر فرض محال من اگر باهاش مخالف باشم، وجود یه تاپیک تو یه گوشه ی انجمن چه ضرری می تونه بهم بزنه؟ :)
عنوان: پاسخ : Haskell را با هم یاد بگیریم! (کامپایل برنامه از سورس!)
ارسال شده توسط: محمدرضا ح. در 04 دی 1393، 10:42 ب‌ظ
خب دوستان عزیز این مدت زیاد نبودم و این تاپیک آپدیت نشد.

سعی میکنم این تاپیک رو بروز کنم، چون بخش زیادی از آموزش جلو رفته، و حیفه که دنبال نشه. یک نظرسنجی هم ایجاد میکنم، که ببینم چقدر با وجود چنین آموزشی موافقید :)

این نظرسنجی عبثِ. چون آموزش مطالب علمی همیشه مفیده.
ضمنا بر فرض محال من اگر باهاش مخالف باشم، وجود یه تاپیک تو یه گوشه ی انجمن چه ضرری می تونه بهم بزنه؟ :)

بیش از این که خود آموزش مدنظر باشه، روش اون رو درنظر بگیرید و در نظرسنجی شرکت کنید. و سوال رو هم ویرایش میکنم، تا موضوع رو بهتر برسونه.
ممنون :)
عنوان: پاسخ : Haskell را با هم یاد بگیریم! (دستورات شرطی)
ارسال شده توسط: محمدرضا ح. در 04 دی 1393، 11:13 ب‌ظ
پست اول بروز، و آموزش به کارگیری دستورات شرطی اضافه شد.