لیسپ برای پایتونی ها!

lisp
python

#1

سلام. به همه دوستان.

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

اما خوب اگر دوست ندارید درگیر لیسپ هایی بشید که روی پلتفرم های دیگه هستند مثل JVM و Beam و غیره بد نیست یه نگاهی به Hy بندازید که یه لیسپ هست بر پایه پایتون.

http://docs.hylang.org/en/stable/


#2

There are only 2 type of programmers in the world.


#3

:joy: :joy: :joy: :joy: :joy:
من واقعا اینجوریم میخوام از پایتون برای همه چیز استفاده کنم
البته از حق نگذریم پتانسیلشو داره


#4

نه واقعا. پتانسیل همه چیزو نداره. (بهتره بگم «بهترین گزینه برای هرکاری نیست»)
پتانسیلش در حد تمام زبانهای برنامه نویسی general purpose هست. و نه بیشتر. (لایبرریهای زیادش رو انکار نمیکنم)


#5

سلام
بله حرف شما کاملا درسته
اما به نسبت زبان های دیگه برای استفاده توی همه چیز بهتره!!!
هر چند که قبول دارم نباید فقط از پایتون برای همه چیز استفاده کنیم وقتی برای هر کاری آپشن های بهتری ممکنه باشه
ولی به هر حال اگه قرار باشه لزوما یه زبان برنامه نویسی رو انتخاب کنیم و فقط بتونیم با اون کد بزنیم پایتون بهترین انتخابه(هرچند ممکنه مثلا Ruby و RoR برای برنامه نویسی وب مزیت های بیشتری داشته باشه)


#6

منم همین مشکل رو دارم. اول javascript کار کردم، خوشم نیومد و محدود بود. بعد رفتم سراغ java، که دستورش برام قابل فهم بود، ولی نمیتونستم باش کار زیادی انجام بدم، به خصوص برای ساختن رابط کاربری زیاد درکش نکردم. آخر سر python یاد گرفتم، ولی از وقتی یادش گرفتم دیگه نمیتونم سراغ زبان دیگه ای برم. خیلی دستورش قابل فهمه برام. حتی چند روز پیش سعی کردم ruby رو امتحان کنم ببینم چطوره، ولی با اینکه دستوراش خلاصه تر بودن، به نظرم قابل فهم تر نبودن.


#7

این بحث چند بار تکرار شده در گذشته. ولی امروز یه توئیت زدم که خیلی به این بحث بر می گرده:

اصلا با این حرف موافق نیستم. پایتون کلی نقطه ضعف داره. مثل concurrency و اینکه با OOP اجین شده و …

پایتون یه زبان معمولی واسه کار های معمولی هست. ولی به واسطه کامیونیتیش خیلی ها ازش استفاده می کنن و خیلی ابزار باهاش وجود داره.


اما در نهایت باید ابزار مناسب رو برای کاری که می خوایم انجام بدیم انتخاب کنیم. همه چیز رو میخ برای چکشمون نبینیم


#8

اگه یه برنامه نویس معمولی بودی، میگفتم داره بر حسب سلیقش حرف میزنه و اهمیت نمیدادم. ولی اگه واقعاً اینجوریه، یعنی کسی که بخواد وبسایت طراحی کنه بهترین کار براش اینه که بره سراغ ruby و ruby on rails؟ یعنی با django کارای معمولی میشه کرد و با ruby on rails کارای بزرگ؟


#9

بحث من Rails یا جنگو نیست. به نظرم ریلز از جنگو بهتر هست ولی مثلا اگر نمره جنگو ۱۰ باشه ریلز ۱۲ هست. اما در کل روبی و پایتون جفتشون یه سری مشکلات مشترک دارن. مثلا همین کانکارنسی. حالا باز تو روبی می شه فانکشنال کار کرد تا حدودی که این قضیه تو پایتون خیلی کمتره اما باز جفتشون این مشکلات رو دارن. اما این به معنیش این نیست که هیچوقت نباید از این ها استفاده کرد. این ابزار ها موارد استفاده خودشون رو دارن. اما نباید اینجوری به قضیه نگاه کرد که مثل پایتون بهترین هست یا روبی بهترین هست. بهترینی وجود نداره. هر ابزاری بدی های خودش رو داره و نقاط قوت خودش رو. من شخصا روبی رو به پایتون ترجیح می دم ( این رو هم اضافه کنم که نزدیک ۱۰ سال هست پایتون کار می کنم و حدود ۶ ۷ سال روبی) اما فقط وقتی از یکی از این ها استفاده می کنم که حس کنم ابزار درست برای کاری که می خوام انجام بدم هستند.

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

این مثال رو زدم که منظورم رو برسونم. هر ابزار بدی و خوبی خودش رو داره و موارد استفاده خودش رو.


#10

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

پروژه ای هست به نام micropython که با پایتون برای میکروکنترلر کد میزنن. روش کارش هم اینه که یه مفصر داغون رو میکرو کامپایل کردن که از روی microSD یه سری کد های مشخص پایتون رو بخونه و به شکل کامند اجرا کنه. قیمت سخت افزار بدون microSD میشه ۴۵دلار. رسپبرپای که یه سیستم عامل لود میکنه و رسما یه کامپیوتر کامله، ۵۵دلاره.
این به نظر من اوج حماقت رو میرسونه.

درمورد بکگراندم هم اینو بگم که ۵ساله پایتون کار میکنم و ۳سال زبان برنامه نویسی اصلیم بود و۲تا وبسایت باهاش زدم که الان دارن کار میکنن، از لایبرریهایی استفاده کردم که تو هیچ زبان دیگه ای مشابهش رو نمیشناسم. (شاید باشه و من توی سرچهام ندیده باشم)
پایتون رو خیلی دوست دارم. ولی we’re just friends :slight_smile:


#11

استفاده من از پایتون محدود به پیاده کردن فوری الگوریتم ها و ابزارهای مورد نیاز و دوباره باز نویسی اونها با زبون های دیگه هست و باید بگم واقعا زبون شیرینی هست ، یه برنامه مانیتورینگی بود که پورت های com رو مانیتور میکرد و خروجی میداد ، باید دوباره خروجی ها رو با ماشین حساب و … محاسبه میکردم دیدم زیاد وقت و اعصاب میخواد با پایتون یه اسکریپت نوشتم کل خروجی رو هرجور که میخواستم همونجور میداد بیرون :blush: پایتون خیلی از جاها باعث آرامش اعصاب و ذخیره وقت برای من شده


#12

میشه لطفاً بگید که چه مشکلاتی رو میشه با لیسپ یا کلوژر حل کرد و چه استفاده ای دارن ؟ یادگیری اینها باعث میشه چه کارهایی رو راحتتر انجام بدم یا چه مهارتی رو در من تقویت میکنند ؟ @lxsameer


#13

اول از همه یادگیری یه زبان یا تکنولوژی جدید به شما کمک می کنه با پارادایم ها و روش های جدید آشنا بشید و از اون ها نکات مثبتشون رو یاد بگیرید و نکات منفی شون رو هم عبرت قرار بدید و تکرار نکنین.

از اینها گذشته با همه زبان های عمومی همه کار می شه کرد اما خوب با یه سری ها نیاز به ریختن عرق و خون بیشتر دارید. کلوژر که یه لیسپ فانکشنال هست و خوب کارکردن باهاش می تونه به شما روش های حل مساله رو از دید زبان های فانکشنال یاد بده و اینکه دید شما رو نسبت به حل مساله عوض کنه. توی هر زبانی یه سری ایده هست که اون زبان ها رو شاخص می کنه. کلوژر، لیسپ، پایتون و … همه همچین ایده هایی دارن. با یادگیری این زبان ها و آشنا شدن با ایده هاشون می تونی ذهن و دید خلاق تری داشته باشید


#14

تا جایی که اطلاع دارم زبان لیسپ در هوش مصنوعی از بقیه یک رگ و گردن بالاتره ، دلیل این چی هست ؟ چه چیزی باعث شده که در این مورد گزینه بهتری باشه؟ متن زیر رو از یه جایی خوندم که توجهم رو خیلی بیشتر کرد :
Popular airline flight schedulers are written in Lisp
The flight search engine by ITA Software is one.
آیا در کلوژر هم همچین قابلیتی مثل lisp هست یا صرفا فقط در سینتاکس از اون الهام گرفته ؟


#15

لازمه اضافه کنم:
تقریبا هر زبانی که ما میشناسیم، turing complete هست. یعنی میشه ماشین تورینگ رو باهاش شبیه سازی کرد.
از پایتون و کلوژر گرفته تا brainfuck و piet.
ولی کلوژر نمیتونه کامپایلر ۱۰۰بایتی داشته باشه. Brainfuck هم اینقدر آدم رو پیر میکنه که عمرمون کفاف نمیده ماشین تورینگ بسازیم.


تا جایی که من میدونم، به خاطر meta programing هست.
اون زمان که هیچ کامپیوتری قدرت پردازش neural network و اینطور چیزها رو نداشت، meta programing برای خودش superpower به حساب میومد و دهه ی ۷۰ و ۸۰ میلادی خیلی زیاد بهش توجه میشد. مثلا ibm یه سری کدهای اسمبلی رو به روش metaprogramming جنریت میکرد برای فلان مدل سخت افزارش (نه الزاما با lisp. شاید با یه زبان دیگه. ولی لیسپ به خاطر متاپروگرامینگ خیلی معروفه)
به نظر من (که تو هوش مصنوعی هنوز در حد hello world هستم) همچنان متاپروگرامینگ بهتر از روشهای دیگست برای ساخت یه سیستم هوشمند که قدرت یادگیری داره.
هدف اصلیم از یادگرفتن کلوژر، اینه که یه لیسپ پیدا کردم که واقعا به درد میخوره و میشه روی ۳میلیارد دستگاه اجراش کرد (شعار جاوا) و قابلیتهای متاپروگرامینگ زیادی داره.

در کلوژر هم قابلیتهای متاپروگرامینگ داریم. هم metalanguage / attribute-oriented programming و هم reflexivity.
سیستم ماکرو نویسی خیلی قوی داره در حدی که ماکروهای زبانهای دیگه یه جور شوخی به حساب میان :joy:


#17

خدایی با این کار کردی یا فقط برا شوخی گفتی ؟ حتما مالبوژم میدونی :rofl::rofl::rofl:
میدونی چند باری رفتم طرف کلوژر اما متاسفانه پرانتزها باعث شدن فرار کنم اما این بار وقت کنم میخوام یاد بگیرم ! برخلاف تصورم هم که فکر میکردم پیچیده هست نیست


#18

اول اینو بگم که داستان لیسپ و هوش مصنوعی جبه تاریخی داره. امروزه تقریبا با هر زبانی می شه این کار رو کرد. اما لیسپ دو ۳ تا خواصیتش باعش شده که به زبان هوش مصنوعی معروف بشه. اولیش سادگی هست. لیسپ ساده تری زبانی هست که تاحالا دیدم. ( بیشتر لیسپ ها این جوری هستند. مثلا کلوژر) برای یاد گیریش یه سری قانون رو کافیه بدونین. نکته دوم اینه که لیسپ ها معمولا در پردازش دیتا فوق العاده هستند. و امکانات زیادی رو برای اینکار دارن. در حدی که کد خودشون رو هم به صورت لیست می خونن و اجرا می کنن. و سومین خاصیت که پویا عزیز هم اشاره کرد metaprogramming هست. سیستم ماکرو های لیسپ فوق العاده قویه به صورتی که شما می تونین یه زبان برنامه نویسی جدید باهاشون بسازین (‌البته کسی زیاد این کار رو نمی کنه اما اگر علاقه دارید racketlang رو ببینید که اونم یه لیسپ هست ). در مجموع خواص قدرت زیادی رو در پردازش داده و پیاده سازی منطق به کاربر می دن که خوب هوش مصنوعی هم به مقدار زیادی همین هست.


#19

تنها مشکلی که با کلوژر دارم پرانتزها هستند ، برخلاف تصورم که فکر میکردم خیلی سخته اتفاقا زمان و پروسه بالایی برای یادگیری نمیخواد و جمع جور مرتب هست ، بنا به گفته @pouya-abbassi عزیز ظاهرا کلوژر هیچ کم و کاستی از لیسپ نداره .


#20

نه نداره. کلوژر یه لیسپ هست. خیلی های براشون پرانتز ها ترسناک به نظر میاد وقتی برای بار اول می بینن کد لیسپ رو ولی خود منطقی هست چون تازگی داره براشون. اما خیلی وقت ها تعداد پرانتز هایی که توی کدتون می ذارین از تعداد پرانتز ها و برکت هایی که تو کد معادل ES6 می ذارین کمتر هست. از طرفی ادیتور شما این کار هارو براتون انجام میده. من یادم نمیاد تا حالا از توی ادیتورم پرانتزی رو بسته باشم. یا نگران این باشم که کدوم پرانتز فلان یکی پرانتز رو می بنده.


#21

نه ولی میخوام به عنوان attribute-oriented language ازش استفاده کنم برای متاپروگرامینگ. قبل از اینکه سراغ کلوژر برم میخواستم با پایتون پیاده سازی کنم.