زبان برنامه نويسي ليسپ توسط جان مک کارتي در سال 1958 در حالي که در مؤسسه? فناوري ماساچوست (MIT) بود ابداع شد.مک کارتي طرح خودش را در يک مقاله? مرتبط با انجمن ماشين آلات کامپيوتري در سال 1960 منتشر کرد.طرح وي در ابتدا به صورت «بخش اول:توابع بازگشتي از ديد عبارتهاي نمادين و محاسبه? آنها توسط ماشين» ارائه شد و بخش دوم آن هيچگاه منتشر نشد.وي نشان داد که با يک تعداد ساده و کمي از عملگرها و علمتگذاري توابع ميتوان يک زبان تورينگ کامل براي الگوريتمها ايجاد کرد. زبان پردازش اطلاعات اولين زبان هوش مصنوعي بود. از سال 1955 يا 1956 و پيش از آن ايدههاي بسياري بر زبان ليسپ وارد شد از جمله پردازش ليست و توابع بازگشتي که در زبان ليسپ به کار برده شد. ثبتهاي اصلي مک کارتي به صورت عبارتهاي غير نمادين که خواستار تفسير کردن و برگرداندن به عبارتهاي نمادين بود.به عنوان مثال عبارت غير نمادين car[cons[A,B]] معادل عبارت نمادين (car (cons A B)بود که در زبان ليسپ به کار گرفته شده بود.برنامه نويسان به سرعت عبارت نمادين را انتخاب و عبارتهاي غير نمادين را ترک کردند.
ليسپ براي اولين بار توسط استفان راسل روي يک کامپيوتر IBM 704 اجرا شد. راسل مقاله? مک کارسي را مطالعه کرد و دريافت که توابع ليسپ ميتوانند در کد ماشين اجرا شوند. اين نتيجه از مطالعه و دريافت راسل نشان ميدهد که مفسر ليسپ ميتوانست براي اجراي برنامههاي ليسپ و ارزيابي صحيح عبارت ليسپ استفاده شود.
دو زبان اسمبلي به عنوان دو عمليات اصلي و ابتدائي تجزيه و جدا کردن عناصر اصلي ليست براي IBM 704 شد.اين دو زبان اسمبلي car (مضمون آدرس ثبات) و cdr (محتواي کاهش ميزان ثباتها) نسخه? ليسپ هنوز ازcar وcdr براي عملياتي که اولين عنصر در يک ليست و باقي مانده? ليست را برميگرداند،استفاده ميکند.
اولين کامپايلر تکميل شده? ليسپ،در سال 1962توسط تام هارت و مايک لوين در MIT اجرا شد، اين کامپالر معرفي شده مدل ليسپ با کامپايلر نحوي در هر کامپايل و ترجمه? توابع ميتواند به طور رايگان در هم بياميزد.
زبان به کار گرفته شده در ثبت هارت و لوين نسبت به کدهاي ابتدائي مک کارتي به شيوه? ليسپ مدرن و جديد نزديک تر ميباشد.
پيوستن به هوش مصنوعي:
بعد از شروع ليسپ ، ليسپ به انجمن تحقيقاتي هوش مصنوعي پيوست ، خصوصا به سيستمهاي PDP ، زبان ليسپ به عنوان پياده ساز طرح کوچک زبان برنامه نويسي استفاده ميشود که مبنايي براي سيستم معروف هوش مصنوعي SHRLU بود.
در سال 1970 تحقيقات علمي هوش مصنوعي به شاخههاي تجاري انشعاب پيدا کرد که کارايي سيستم ليسپ موجود در اين زمينه يک روند رو به رشد شد.
ليسپ يک سيستم مشکل براي اجرا، مهارت کامپايلر و سخت افزار ذخيره کننده را در سال 1970 دارا باشد. بازيابي عادي حافظه ، توسط دانشجوي فارغالتحصيل MIT ( دانيل ادوارد ) گسترش داده شده ،که براي اجراي ليسپ روي سيستمهاي محاساتي ساخته شده بود اما راندمان آن هنوز يک مشکل بود. براي رهبري ماشين ليسپ: سخت افزار اختصاصي براي اجراي محيط ليسپ و برنامههاي آن استفاده ميشود. پيشروي در هردو سخت افزار کامپيوتر و فناوري کامپايلر از ماشينهاي ليسپ از کار افتاده الهام گرفته شدهاست.
طي شک کوشش بزرگ نسخههاي بيشماري از زبان ليسپ را در يک زبان واحد متمرکز و متحد کردند(نسخههاي برجسته و قابل ملاحظهاي شامل: اينترليسپ ، مک ليسپ ، متاليسپ ، و فرانزليسپ) زبانهاي جديد (ليسپ عمومي و مشترک ) در اصل يک زير مجموعه? سازگاري از نسخههاي تعويض شده بود. در سال 1994 ، ANSI يک ليسپ عمومي و مشترک استاندارد منتشر کرد. ليسپ عمومي و مشترک زبان برنامه نويسي فناوري اطلاعات ANSI X3.226-1994 در آن زمان فروشگاههاي جهاني براي ليسپ خيلي کوچکتر از المان بود.
ترکيب و معنا شناسي:
ليسپ يک عبارت جهتدار است ، برخلاف بيشتر زبانهاي ديگر ، بين عبارتها و جملهها تمايز و فرقي وجود ندارد . همه? کدها و دادهها به عنوان عبارتها نوشته شدهاند – زماني که يک عبارت ارزيابي ميشود يک مقدار ( يا يک ليستي از مقادير) را ميسازد ، که آن هم در داخل عبارات ديگر جاسازي ميشود.
مقاله? 1958 مک کارتي دو نوع از ترکيبها را معرفي کرد: عبارت نمادين Sexps هم ناميده ميشود ، که بازتابي از نمايش داخلي کدها و داده هاست و عبارت غير نمادين هرگز مورد توجه قرار نگرفت و تقريبا همه? زبانها امروزه از عبارات نمادين استفاده ميکنند.
استفاده از پرانتزگذاريها تفاوت بسيار آشکار و مشهودي ميان ليسپ و ديگر زبانهاي برنامه نويسي ايجاد کردهاست . اسم مستعار LISP از Lost In Stupid Parenthese و يا Lost of Irritating Supper fluous parenthese گرفته شدهاست . هرچند ترکيب عبارتهاي نمادين مسئولي براي توان ليسپ است ، اين ترکيب به شدت با قاعده و منظم است.
هرچند ترکيبات ليسپ به نمادگذاري قديمي محدود نشدهاند ميتواند به سبکهاي ديگر توسعه پيدا کند. تکيه روي عبارتها ، قابليت انعطاف پذيري زيادي به زبان ميدهد ، زيرا توابع ليسپ به صورت ليست نوشته شدهاند ، آنها دقيقا مانند دادهها ميتوانند پردازش شوند، اين قابليت اجازه ميدهد برنامههاي ليسپ به سادگي و راحتي نوشته شوند و به نسبت برنامههاي ديگر به راحتي اداره شوند . (برنامه نويسي غير نمادين)بسياري از نسخههاي زبان ليسپ با عناصر جدا شده توسط فاصلههاي سفيد و پرانتزگذاري شدهها نوشته ميشود. براي مثال (1 2 f00 ) يک ليست است که عنصرهاي آن سه اتم هستند ( اتم: کوچکترين عضو ليست ) : اين مقادير 1 و 2 و F00 هستند. اين مقادير ضمنا داراي نوع دادهاي خاصي هستند ، مثلا اين ليست داراي دو عدد صحيح 1 و 2 و يک نوع داده? ويژه? ليسپ که يک Symbol يا نماد ناميده ميشود.
همچنين يک ليست خالي () به عنوان يک اتم ويژه? صفر و يا پوچ معرفي شدهاست. موجوديت يک ليسپ از اتم و ليست تشکيل ميشود. عباتها به عنوان ليست نوشته شدهاند ، استفاده کردن از ثبتهاي پيشوندي ، عناصر ابتدايي در ليست نامي از يک شکل تابع ، عملگرها ، ماکروها و يا اپراتورهاي ويژهاست.
آرگومانها باقيماندههايي از ليستها هستند ، براي مثال تابع list آرگومانها را به عنوان يک ليست بر ميگرداند ، بنابراين عبارت (list ‘1 ‘2 ‘foo) ارزيابي ميشود و حاصل اين ارزيابي ليست (1,2,foo) ميباشد.
نيازي به ارزيابي کردن اعداد نيست چون ارزيابي عدد 1 عدد 1 ميشود.آرگومانهاي مثال قبل از اعداد هستند يعني آرگومانهاي ويژه که اين آرگومانها از ارزيابي کردن آرگومانها جلوگيري ميکنند چون مقادير آنها مشخص است.هر عبارتي که بيان ميشود قبل از اينکه با عبارات ديگر پيوست داده شود به صورت بازگشتي ارزيابي ميشود.
(list(1 2 (list(3 4)))) در اين مثال حاصل اررزيابي به صورت ليست (1,2(3,4)) ميباشد ،توجه کنيد اين ليست داراي 3 آرگومان ميباشد ، ليستها ميتوانند به صورت تو در تو باشند . اپراتورهاي حسابگر به صورت همسان رفتار ميکنند.
حاصل عبارت (+1 2 3 4 ) عدد 10 ميباشد. عبارت معادل عبارت بالا به صورت 1+2+3+4 ميباشد که از نشانگذاري ميان وندي استفاد شدهاست. اپراتورهاي حسابگر در زبان ليسپ variadic(n-ary) که زبان ليسپ توانايي پذيرفتن هر تعداد آرگومان را داراست.
عملگرهاي ويژه ساختمان کنترل ليسپ را آماده ميکنند. براي مثال ، اپراتور ويژه if سه آرگومان ميپذيرد،اگر اولين آرگومان صفر و يا خالي باشد دومين آرگومان ارزيابي ميشود و در غير اين صورت ه?رگومان سوم بررسي ميشود . بنابر اين if(nill(list 1 2 “foo”)(list 3 4 “bar”) که تنها آرگومان (list 3 4 “bar”) بررسي ميشود.