شروع یادگیری LISP

سلام
من میخوام برنامه نویسی به زبان lisp رو شروع کنم
بیشتر میخوام توی هوش مصنوعی ازش استفاده کنم و اینکه خیلی زیاد شنیدم که یادگیری lisp درک خوبی به برنامه نویس ها میده (فقط پرانتزاش یکمی ترسناکه :wink: )
حالا چند تا سول دارم یکی اینکه lisp همون clisp یا common lisp هست؟
باید از خود lisp شروع کنم یا مثلا زبانی مثل clojure ؟

3 Likes

Common lisp یه پیاده سازی لیسپ هست. به نظر من اگر با clojure شروع کنی خیلی بهتر هستش. برای پرانتز ها هم نگران نباش. اگر روی editor ی که داری parinfer نصب کنی (‌برای همه ادیتور ها هستش) دیگ فکر نمی کنم اصلا متوجه پرانتز ها بشی.

6 Likes

آقا سمیر سلام
کدوم فریم ورک Clojure رو برای وب (back end) پیشنهاد می کنید؟
یه سری تحقیقات بین Rust و Clojure انجام دادم به نظرم Rust فریم ورک های بهتری برای توسعه وب (هم back end هم front end) داره.
اگه می خواستید بعد از Python و Ruby یه دیگه زبان رو یاد بگیرید انتخاب شما چی بود؟ (Rust, Clojure, Elixir) (صرفا برای وب و بک اند)
ممنونم.

2 Likes

والا clojure با بقیه فرق داره. چیزی به نام framework وجود نداره. mindset به این شکل هست که فریم ورک محدودیت ایجاد می کنه. واسه همین لایبرری های وب وجود دارن. مثل yada, pedestal و یه سری های دیگه. بستگی داره که چه کاری بخوای انجام بدی. من Rust اونقدری نمی دونم که نظر بدم اما واسه فرانت اند clojurescript فوق العادست.

من کلوژر رو انتخاب می کردم و انتخاب بعدم Elixir می بود

5 Likes

rust هم فریمورکهای بزرگی نداره, و بهتره بر اساس نیاز از مجموعه ای از crate ها و کتابخانه ها استفاده کنید

4 Likes

به عنوان یه مبتدی توصیه میکنم با کتاب The Art of Lisp Programming شروع کنی.

3 Likes

LISP = Lots of Irritating Stupid Parentheses :grinning:

3 Likes

امیدوارم این حرف صرفا جنبه‌ی شوخی داشته باشه.
زبان لیسپ، بر پایه‌ی Lambda Calculus ساخته شده. جایگزینی برای Turing Machine (طراحی حساب لامبدا، قبل از ماشین تورینگ انجام شده.)

پرانتزهای یه کد به زبان لیسپ، اصلا بیشتر از پرانتزها و براکت‌های همون کد توی یه زبان دیگه نیست! فقط جاشون عوض شده:

my_function ("hello"); # A random C-like language
(my-function "hello")  # A random LISP dialect

و این پرانتزها دقیقا همون چیزیه که به لیسپ قدرت میده. با لیسپ، کارهایی رو میشه به سادگی انجام داد که اگه بخواید توی زبانهای دیگه انجامشون بدید، به سختی ساختن یه lisp interpreter توی اون زبانه!

“Lisp is a programmable programming language.”
John Foderaro, CACM , September 1991

Part of what makes Lisp distinctive is that it is designed to evolve. As new abstractions become popular (object-oriented programming, for example), it always turns out to be easy to implement them in Lisp. Like DNA, such a language does not go out of style.

Paul Graham, ANSI Common Lisp


از ویکیپدیا:

The name LISP derives from “LISt Processor”. Linked lists are one of Lisp’s major data structures, and Lisp source code is made of lists. Thus, Lisp programs can manipulate source code as a data structure, giving rise to the macro systems that allow programmers to create new syntax or new domain-specific languages embedded in Lisp.

کلمه‌ی LISP از LISt Processor میاد. «لیست پیوندی» یکی از دیتاهای اصلی سورس‌کد لیسپ هست. برنامه‌های لیسپ میتونن سورس‌کد (سورس خودشون رو) ویرایش کنن همونطور که هر زبانی میتونه دیتاهای ورودی به خودش رو ویرایش کنه، این مساله به سیستم Macroهای لیسپ قدرت میده و به برنامه‌نویسها اجازه میده سینتکس جدید اختراع کنن و زبان خاص دامنه‌ی خودشون رو داخل لیسپ بسازن.

The interchangeability of code and data gives Lisp its instantly recognizable syntax. All program code is written as s-expressions , or parenthesized lists. A function call or syntactic form is written as a list with the function or operator’s name first, and the arguments following; for instance, a function f that takes three arguments would be called as (f arg1 arg2 arg3) .

این قابلیت که بهش «code is data and data is code» یا به عبارت درست‌تر «Homoiconicity» گفته میشه، سینتکس خاص لیسپ رو میسازه. کل نرم‌افزار به شکل S-expression نوشته میشه. صدا زدن یک تابع به این شکل هست که یک لیست میسازیم که اولین چیز داخلش اسم تابعمون هست و چیزهای بعدی، ‌آرگومان‌های تابع هستن. به عنوان مثال:

(+ 1 2 3 4 5)
(my-function "my-username" "email-address")
4 Likes

اینو اولین بار از سمیر شنیدم - واقعا تفکر من توی حل مسئله من رو تحت تاثیر خودش قرار داد
اگر کسی بفهمه جور دیگه ای به برنامه نویسی نگاه میکنه

1 Likes

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

پیشنهاد میکنم یه نگاهی به Lambda Calculus بندازید.
LearnXinYminutes
Wikipedia

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

1 Likes

خوندم ولی نتونستم هدف این مقاله رو متوجه بشم

1 Likes

mind set اش شبیه gopher هاست؟

از وقتی توی این انجمن عوض شدم سوادم داره بیشتر میشه - واقعا خوشحال اینجا رو پیدا کردم

1 Likes

کلا کلوژر و گو جفتشون روی simplicity خیلی اصرار دارن که بنظرم خیلی خوبه

1 Likes

این، مقاله نیست. یه سایته که آموزشهای این مدلی برای زبانهای برنامه‌نویسی میذاره که ۵دقیقه توش بگردیم و بفهمیم یه زبانی درکل چطوریه.
البته lambda calculus واقعا به هیچ دردی نمیخوره. صرفا یک تئوری هست. یک مدل ریاضی، برای حل مسائل.
پایه‌ی زبانهای functional و LISP هست.

1 Likes