(۲۷ مهر ۱۴۰۰ ۰۱:۰۰ ق.ظ)blackhalo1989 نوشته شده توسط: (26 مهر ۱۴۰۰ ۱۰:۴۴ ب.ظ)kilookiloo نوشته شده توسط: (26 مهر ۱۴۰۰ ۰۷:۰۳ ب.ظ)blackhalo1989 نوشته شده توسط: فکر کنم یاد گرفتن تفکر فانکشنال (مخصوصا با یاد گرفتن یه زبان pure functional مثل Haskell) و همینطور یاد گرفتن lisp میتونه ذهن برنامه نویس رو باز کنه. خودم هنوز نرفتم سراغشون.
ی سری سوالا هستن با عنوان Ninety-Nine Problems که میتونی توی زبان های مختلف پیداشون کنی. این سوالات رو اومدن با تفکر فانکشنال حل کردن و قشنگ میتونی با خوندن جواب هاشون ایده بگیری. مثلا میبینی به خاطر استفاده نکردن از متغیرهای mutable ی سری از سوالات رو کامل recursive حل میکنن
مهمان عزیز شما قادر به مشاهده پیوندهای انجمن مانشت نمیباشید. جهت مشاهده پیوندها ثبت نام کنید.
مهمان عزیز شما قادر به مشاهده پیوندهای انجمن مانشت نمیباشید. جهت مشاهده پیوندها ثبت نام کنید.
یه بار دیده بودم یه چنین چیزی تو اسکالا هست اما ریز نشده بودم. الان که بررسی کردم ظاهرا اولین بار برای پرولوگ اومده بعد هم ظاهرا برای لیسپ بوده. اینا ۹۹ سوال ثابته یا برای هر زبانی فرق داره؟ همشون فاکشنال هستن؟
این بحث استفاده نکردن از متغیر های mutable که تو زبان های pure functional داریم نتایج درخشانی داره. مثلا تمام اون مشکلات همزمانی که ما تو درس سیستم عامل داشتیم مثل race و deadlock تو این زبان ها وجود نداره.
والا من خودم سه چهار سال پیش نصف سوالات اسکالا رو حل کردم، چند ماه پیش هم میخواستم کاتلینش رو به یکی پیشنهاد بدم جواب سوالای اولش رو نگاه کردم با مایندست کاملا فانکشنال نوشته شده بود ولی بقیه رو نمیدونم.
آره immutability برای اینه که متغیرت ناخواسته تغییر نکنه. حالا این ناخواسته میتونه از ی ترد یا پروسه دیگه باشه یا توسط ی برنامه نویس دیگه.
البته من برنامه نویس اندرویدم و زیاد با این مشکلات رو به رو نیستم. هرچند اگه هم همچین مشکلاتی وجود داشته زبانهای برنامه نویسی خودشون امکاناتی رو بهت میدن (مثلا اگه اشتباه نکنم مفهوم سمافور که توی سیستم عامل داشتیم توی جاوا پیاده سازی شده، یا میتونی متدت رو synchronised کنی و …)
از طرفی اکثر راه حلهای ریکرسیو بهینه نیستن، هرچند زبانهایی مثل اسکالا یا کاتلین بهت این امکان رو میدن که اگه فانکشنت tail recursive باشه انوتیتش کنی و در زمان کامپایل این تابع به ی تایع iterative تبدیل بشه ( توی اسکالا یادمه انوتیشن tailrec استفاده میشد ولی کاتلین رو یادم نمیاد)