۲ - ۳درک بیانیهها
هر چیز تو هسکل یا یه تعریف ِه، یا یه بیانیه. بیانیه یا expressionها میتونن مقادیر باشن، ترکیبی از مقادیر باشن، و یا توابعی که به مقادیر اعمال شدن باشن. بیانیهها محاسبه میشن و به یک جواب میرسن. بیانیههایی که یه مقدار مشخصاند، محاسبهی پیش و پا افتادهای دارن، چراکه خودشون جواب محاسبهاند. بیانیههایی که یه معادلهی حساب اند، محاسبهشون در واقع همون محاسبهی عملگر با آرگومانهاشه. با اینکه برنامههای هسکل فقط شاملِ حل محاسباتِ ریاضی نیستن، ولی همهی بیانیههای هسکل به نحوِ مشابهی کار میکنن: خیلی واضح و شفاف به یه نتیجهی قابل پیشبینی محاسبه میشن. هستهی وجودیِ برنامههای هسکل همین بیانیهها اند، کلِ اون برنامه هم در واقع یه بیانیهی بزرگه که متشکل از بیانیههای کوچکتره.
در مورد تعاریف، فعلاً کفایت میکنه که بگیم انقیادهای سطح بالا اند، و این اجازه رو میدن که بیانیهها رو نامگذاری کنیم. بعداً میتونیم به جای کپی کردن اون بیانیهها از اسمشون استفاده کنیم.
چندتا مثال از بیانیهها:
1
1 + 1
"Icarus"
هر کدوم رو میتونین تو GHCi REPL بررسی کنین، کد رو تو prompt تایپ کنین و enter بزنین تا جواب محاسبهی بیانیه رو ببینین. برای مثال، مقدار عددی ۱ سادهتر نمیشه، پس خودش برمیگرده.
اگه تا الان این کارو نکردین، GHCi رو باز کنید و این مثالها رو همراهی کنید.
وقتی تو GHCi این رو تایپ میکنیم:
Prelude> 1
1
عدد ۱ چاپ میشه، چرا که سادهتر نمیشه.
در مثال بعد، GHCi بیانیهی 1 + 2
رو به 3
ساده میکنه و بعد عدد ۳ رو چاپ میکنه. از ۳ سادهتر نمیشه چون جملهای برای محاسبه نمیمونه:
Prelude> 1 + 2
3
تعداد دفعاتی که میتونین بیانیهها رو تودرتویِ هم بنویسین، نامحدوده، فقط اگه حوصلهی نوشتنش رو داشته باشین!
Prelude> (1 + 2) * 3
9
Prelude> ((1 + 2) * 3) + 100
109
میشه همینطور ادامه داد، لایههای بیانیهتون رو بیشتر کنین و محاسبه کنین. ولی بیانیهها به همینها محدود نمیشن.
حالت معمولی
وقتی نشه بیانیهها رو بیشتر محاسبه کرد، یا به کلام دیگه سادهنشدنی باشن، میگیم در حالتِ معمولی اند. حالت معمولیِ 1 + 1
میشه ۲. چرا؟ چون بیانیهی 1 + 1
رو میشه با اعمالِ اوپراتورِ جمع به دو تا آرگومانش ساده کرد. به زبان دیگه، 1 + 1
یه بیانیهست که سادهشدنیه، و ۲ هم یه بیانیهست، ولی سادهتر نمیشه — به هیچ چیزی غیر از خودش محاسبه نمیشه. بیانیههای سادهشدنی رو redex* هم میگن. ما توی کتاب به این فرایند، محاسبه (evaluation) یا سادهسازی (reduction) میگیم، ولی ممکنه بعضی جاها لغات normalizing یا اجرا رو هم ببینید (خیلی لغات دقیقی نیستن).
م. ترکیبی از دو لغت reducible و expression.