زبان‌های برنامه‌نویسی کمیاب هستند که بتوانند چنین پیشینه‌ای طولانی و تأثیری عمیق بر دنیای کامپیوتر داشته باشند. زبان لیسپ (LISP) که مخفف عبارت «پردازش فهرست» (List Processing) است، دومین زبان سطح‌بالای برنامه‌نویسی است که تا به امروز استفاده می‌شود و تنها فورترن از آن قدیمی‌تر است. با این حال، قدمت این زبان جذاب‌ترین ویژگی آن نیست. لیسپ از روز اول با هدفی بسیار خاص و بلندپروازانه متولد شد: تبدیل شدن به ابزار اصلی پژوهش‌های هوش مصنوعی. این هم‌راستایی ذاتی میان طراحی زبان و نیازهای هوش مصنوعی، مسیر تکامل این فناوری را برای همیشه تغییر داد.

از کنفرانس دارتموث تا MIT؛ خاستگاه لیسپ

ریشه‌های فکری لیسپ به زمان تولد هوش مصنوعی به‌عنوان یک رشته علمی بازمی‌گردد. جان مک‌کارتی، از پیشگامان این عرصه، ایده‌های اصلی این زبان را در سال ۱۹۵۶ و در جریان «پروژه پژوهشی تابستانی دارتموث درباره هوش مصنوعی» توسعه داد. انگیزه مک‌کارتی بسیار روشن بود: او به زبانی جبری برای پردازش کارآمد فهرست‌ها نیاز داشت تا بتواند چالش‌های پیچیده هوش مصنوعی را حل کند.

در سال ۱۹۵۸، مک‌کارتی در مؤسسه فناوری ماساچوست (MIT) توسعه جدی این زبان را آغاز کرد. سکوی هدف او رایانه IBM 704 بود. زبانی که مک‌کارتی در ذهن داشت باید فهرست‌ها را بهینه پردازش می‌کرد؛ چرا او به‌خوبی می‌دانست که حل مسائل نمادین پیچیده در هوش مصنوعی بدون مدیریت صحیح فهرست‌ها غیرممکن است. او در مسیر توسعه لیسپ از زبان پردازش اطلاعات (IPL) الهام گرفت، اما معتقد بود زبان‌های جبری انعطاف‌پذیری بیشتری ارائه می‌دهند. علاوه بر این، نارضایتی او از کتابخانه پردازش فهرست فورترن (FLPL) به دلیل نبود دو ویژگی حیاتی یعنی بازگشت (Recursion) و دستورات شرطی مدرن if-then-else، او را مصمم‌تر کرد تا زبان مستقل خود را خلق کند.

تبدیل فرمول‌های ریاضی به کد اجرایی

لیسپ در ابتدا تنها یک نمادگذاری ریاضی برای برنامه‌های رایانه‌ای بود و از مفاهیم حساب لامبدا (Lambda Calculus) اثر پذیرفته بود. در طراحی اولیه مک‌کارتی، عبارت‌های M (M-expressions) به عبارت‌های S (S-expressions) ترجمه می‌شدند. اما با گذشت زمان و پیاده‌سازی عملی زبان، برنامه‌نویسان متوجه شدند که نوشتن مستقیم کدها با عبارت‌های S بسیار کارآمدتر است و این رویکرد به‌سرعت جایگزین روش‌های قبلی شد.

پیمایش مسیر از تئوری روی کاغذ تا نرم‌افزار اجرایی، کارگاهی برای دستان استیو راسل بود. او که در آن زمان برای مک‌کارتی کار می‌کرد، با تکیه بر توانمندی خود توانست تابع eval لیسپ را مستقیماً روی سخت‌افزار IBM 704 پیاده‌سازی کند. مک‌کارتی بعدها با شوخ‌طبعی به این خاطره اشاره می‌کند:

«استیو راسل گفت ببین، چرا من این eval را برنامه‌نویسی نکنم... و من گفتم: تو داری تئوری را با عمل اشتباه می‌گیری؛ این eval برای خواندن است، نه برای محاسبه. اما او پیش رفت و آن را ساخت... بنابراین از آن لحظه به بعد، لیسپ همان شکلی شد که امروز می‌شناسیم.»

نمونه کدهای برنامه نویسی لیسپ و هوش مصنوعی

این موفقیت منجر به تولد یک مفسر اجرایی شد، اما سخت‌افزار IBM 704 نیز جای خود را در ساختار واژگانی این زبان باز کرد. دو ماکروی زبان اسمبلی در این دستگاه، به عملیات پایه برای تجزیه فهرست‌ها در لیسپ تبدیل شدند: car (محتوای بخش نشانی ثبات) و cdr (محتوای بخش کاهش ثبات). امروزه تمام گویش‌های مدرن لیسپ همچنان از این دو دستور بنیادین برای دستکاری داده‌ها استفاده می‌کنند.

تأثیرگذاری لیسپ فراتر از یک زبان برنامه‌نویسی ساده است و این زبان توانسته با ارائه پارادایم‌های نوین، پایه‌های توسعه نرم‌افزارهای هوشمند را در دهه‌های گذشته شکل بخشد. میراث جبران‌ناپذیر مک‌کارتی نشان می‌دهد که چگونه تفکر ریاضیاتی خالص می‌تواند به شکلی بی‌نظیر با مهندسی نرم‌افزار ترکیب شده و ابزارهایی را خلق کند که حتی پس از گذشت چندین دهه، در خط مقدم نوآوری‌های تکنولوژیک باقی بمانند.