Bölüm 17 1958Yapay Zekanın Doğuşu

John McCarthy ve LISP

McCarthy'nin LISP programlama dilini geliştirmesi ve yapay zeka araştırmalarına etkisi.

John McCarthy LISP programlama dili sembolik hesaplama fonksiyonel programlama
Önemli isimler: John McCarthy

1. Giriş

1958 sonbaharında, Massachusetts Teknoloji Enstitüsü'nde (MIT) otuz bir yaşında bir matematik profesörü, bilgisayar biliminin tarihini kalıcı biçimde değiştirecek bir programlama dili tasarlamaya başladı. John McCarthy'nin LISP'i (LISt Processing — Liste İşleme), yalnızca teknik bir araç olarak değil, makinelerin nasıl "düşünebileceğine" dair radikal bir felsefi önerme olarak doğdu [1]. O güne kadar var olan programlama dilleri — başta IBM'in FORTRAN'ı (1957) — sayısal hesaplamaları hızla gerçekleştirmek için tasarlanmıştı; ancak McCarthy'nin aklındaki problemler sayılarla değil, sembollerle, mantıksal ilişkilerle ve soyut kavramlarla ilgiliydi [2]. Bir makineye bir teoremin kanıtını buldurtmak, bir cümlenin anlamını çözümletmek ya da satranç hamlelerini değerlendirtmek istiyorsanız, sayı kıran bir dile değil, düşünceleri ifade edebilen bir dile ihtiyacınız vardı. LISP, tam da bu ihtiyaca yanıt olarak ortaya çıktı.

LISP'in doğuşunu anlamak için 1950'lerin sonundaki entelektüel iklimi kavramak gerekmektedir. 1956 Dartmouth Konferansı, "yapay zeka" terimini akademik sözlüğe kazandırmış ve alanı bağımsız bir araştırma disiplini olarak kurmuştu [3]. Konferansta ortaya çıkan en önemli konsensus noktalarından biri, sembolik bilgi işlemenin (symbolic information processing) yapay zeka araştırmalarının merkezine yerleştirilmesi gerektiğiydi [4]. Ancak bu vizyonu hayata geçirecek uygun bir programlama aracı yoktu. FORTRAN, bilimsel hesaplama için mükemmeldi; ancak "eğer... o zaman... yoksa..." biçimindeki mantıksal çıkarımları, iç içe geçmiş kavram ağaçlarını ya da bir programın kendi yapısını inceleyip değiştirmesini destekleyecek biçimde tasarlanmamıştı [5]. IPL (Information Processing Language), Newell ve Simon tarafından Logic Theorist ve General Problem Solver için geliştirilmiş olsa da düşük seviyeli bir dil olarak kalıyordu ve sembolik soyutlama kapasitesi sınırlıydı [6].

McCarthy, Dartmouth Konferansı'ndan döndükten sonra MIT'ye geçerek Yapay Zeka Projesi'ni (MIT AI Project) kurdu ve burada LISP'i geliştirmeye başladı [7]. Bu bölümde, LISP'in entelektüel kökenlerini, tasarım felsefesini, teknik yeniliklerini, dilin yaratılış sürecinde kilit rol oynayan aktörleri, dönemindeki etkisini ve yapay zeka tarihindeki kalıcı mirasını ayrıntılı biçimde ele alacağız. LISP'in hikayesi, yalnızca bir programlama dilinin tarihi değildir; aynı zamanda "bilgi nasıl temsil edilir ve işlenir?" sorusuna verilen en etkili yanıtlardan birinin hikayesidir. Bir önceki bölümde incelediğimiz Dartmouth Konferansı'nda filizlenen sembolik yapay zeka vizyonu, LISP ile somut bir araca kavuşacaktır; bir sonraki bölümde ele alacağımız Arthur Samuel'in makine öğrenmesi çalışmaları ise LISP'in temsil ettiği sembolik paradigmanın alternatif bir yolunu — deneyimden öğrenme yolunu — izleyecektir.

2. Literatür Taraması

LISP'e ilişkin akademik literatür, dilin altmış yılı aşkın tarihini, teknik evrimini ve kültürel etkisini çok katmanlı biçimde belgelemektedir. Bu literatür, birincil teknik kaynaklar, tarihsel analizler ve eleştirel değerlendirmeler olmak üzere üç ana kolda incelenebilir.

En temel birincil kaynak, McCarthy'nin 1960 yılında Communications of the ACM'de yayımlanan "Recursive Functions of Symbolic Expressions and Their Computation by Machine, Part I" başlıklı makalesidir [1]. Bu makale, LISP'in matematiksel temellerini ortaya koymakta ve dilin temel yapılarını — S-ifadeleri (S-expressions), temel fonksiyonlar (car, cdr, cons, atom, eq), koşullu ifadeler (conditional expressions) ve evrensel fonksiyon (universal function) kavramını — tanımlamaktadır. McCarthy, makalenin "Part I" olarak adlandırılmasına rağmen ikinci kısmı hiçbir zaman yazmamıştır; bu durum, makalenin kendi başına bir bütünlük taşıdığının bir göstergesidir [8]. McCarthy'nin 1978 tarihli "History of LISP" makalesi, dilin gelişim sürecini retrospektif bir bakışla anlatmakta ve özellikle eval fonksiyonunun keşfini — "beklenmedik bir matematik keşfi" olarak nitelendirmektedir [9].

Steele ve Gabriel'in 1993 tarihli "The Evolution of Lisp" makalesi, LISP ailesinin 1958'den 1990'ların başına kadarki evrimini kapsamlı biçimde belgelemiş ve dilin farklı lehçelerinin — MacLisp, InterLisp, Scheme, Common Lisp — nasıl ortaya çıktığını izlemiştir [10]. Bu çalışma, LISP'in "tek bir dil" olmaktan çok bir "dil ailesi" olduğunu vurgulayarak, standardizasyon çabalarının tarihçesini de sunmuştur. Graham'ın (2004) "The Roots of Lisp" makalesi, McCarthy'nin orijinal makalesini modern okuyucu için yeniden yorumlamış ve LISP'in yalnızca yedi ilkel operatörle (quote, atom, eq, car, cdr, cons, cond) nasıl tam bir programlama dili oluşturabildiğini göstermiştir [11].

Abelson ve Sussman'ın (1985/1996) Structure and Interpretation of Computer Programs (SICP) adlı ders kitabı, MIT'nin efsanevi 6.001 dersinin temelini oluşturmuş ve Scheme lehçesi üzerinden LISP'in temel fikirlerini — soyutlama, özyineleme, yüksek dereceli fonksiyonlar, metaprogramlama — kuşaklar boyu bilgisayar bilimciye öğretmiştir [12]. Bu kitap, LISP'in yalnızca bir YZ dili olmayıp genel bilgisayar bilimi eğitiminin temel taşı olabileceğini kanıtlamıştır.

Norvig'in (1992) Paradigms of Artificial Intelligence Programming: Case Studies in Common Lisp adlı eseri, LISP'in yapay zeka uygulamalarındaki kullanımını vaka çalışmaları üzerinden sistematik biçimde incelemiştir [13]. Kitap, doğal dil işleme, uzman sistemler, planlama ve öğrenme gibi alanlarda LISP'in nasıl uygulandığını somut örneklerle göstermiştir. Graham'ın (1993) On Lisp: Advanced Techniques for Common Lisp eseri, LISP'in makro sistemini — dilin en ayırt edici özelliklerinden birini — derinlemesine ele almış ve "aşağıdan yukarıya programlama" (bottom-up programming) paradigmasını savunmuştur [14].

Tarihsel analizler arasında, McCorduck'ın (2004) Machines Who Think adlı eseri, LISP'in Dartmouth sonrası YZ araştırmalarının "lingua franca"sı haline gelişini aktarmıştır [15]. Crevier'in (1993) AI: The Tumultuous History of the Search for Artificial Intelligence kitabı, LISP'in YZ kışları sırasındaki konumunu — hem bir güç hem de bir yük olarak — tartışmıştır [16]. Nilsson'ın (2010) The Quest for Artificial Intelligence eseri, LISP'i erken dönem YZ programlama araçları bağlamında konumlandırmış ve IPL ile karşılaştırmalı bir analiz sunmuştur [17]. Russell ve Norvig (2021), LISP'in yapay zeka tarihindeki rolünü modern perspektiften değerlendirmiş ve dilin sembolik YZ paradigmasıyla özdeşleşmesinin hem bir avantaj hem de bir dezavantaj olduğunu belirtmiştir [18].

Sussman ve Steele'in (1975) Scheme'i tanıtan Lambda Papers serisi, LISP'in minimalist bir yeniden yorumunu sunarak fonksiyonel programlama kuramına önemli katkılarda bulunmuştur [19]. Hickey (2008), Clojure dilini tanıtırken LISP'in modern yazılım geliştirme pratiklerine nasıl uyarlanabileceğini göstermiş ve özellikle eşzamanlılık (concurrency) problemlerine LISP'in fonksiyonel paradigmasının sunduğu çözümleri vurgulamıştır [20].

Eleştirel literatürde, Dijkstra'nın LISP'in "çok sayıda aptalca parantez" (Lots of Irritating Superfluous Parentheses) eleştirisi yaygın biçimde aktarılmakta; ancak bu eleştirinin kaynağı tartışmalıdır [21]. Daha sistematik bir eleştiri, Gabriel'in (1991) "Lisp: Good News, Bad News, How to Win Big" başlıklı makalesinde bulunabilir; Gabriel, LISP topluluğunun "doğruyu yapma" (the right thing) takıntısının, dilin yaygınlaşmasını engellediğini savunmuştur [22]. Türkçe literatürde, Nabiyev'in (2021) Yapay Zeka ders kitabı, LISP'i yapay zeka programlama dilleri bağlamında Türk okuyucuya tanıtmıştır [23]. Akın'ın (2006) Yapay Zeka ve Yapay Sinir Ağları eseri ise LISP'in sembolik yapay zekadaki rolünü Türkçe kaynak olarak belgelemiştir [24].

3. Tarihsel ve Teorik Arka Plan

Entelektüel Soy Ağacı. LISP'in kökenleri, yirminci yüzyıl matematik ve mantık tarihinin en derin katmanlarına uzanmaktadır. Dilin en doğrudan entelektüel atası, Alonzo Church'ün 1930'larda geliştirdiği lambda hesabıdır (lambda calculus) [25]. Church, hesaplanabilirliği tanımlamak için fonksiyonların anonim biçimde ifade edilebileceği ve birbirine uygulanabileceği biçimsel bir sistem oluşturmuştu. Lambda hesabı, Alan Turing'in evrensel makine kavramıyla hesaplama gücü açısından eşdeğer olduğu kanıtlanmış; ancak Turing makineleri imperatif (adım adım komut yürüten) bir model sunarken, lambda hesabı deklaratif (sonucu tanımlayan) bir model sunmaktaydı [26]. McCarthy, Princeton'da doktora öğrencisiyken Church'ün öğrencisi olmuş ve lambda hesabının zarif soyutlama gücünden derinden etkilenmiştir [9]. LISP'teki "lambda" ifadesi — anonim fonksiyon tanımlama yapısı — doğrudan Church'ün notasyonundan alınmıştır.

İkinci büyük entelektüel kaynak, sembolik mantık geleneğidir. Gottlob Frege'nin (1879) Begriffsschrift'inden başlayarak Bertrand Russell ve Alfred North Whitehead'in (1910–1913) Principia Mathematica'sına, oradan Kurt Gödel'in (1931) tamamlanmazlık teoremlerine uzanan bu gelenek, biçimsel sistemlerin gücünü ve sınırlarını ortaya koymuştu [27]. McCarthy, yapay zekanın temelinde mantıksal çıkarımın yattığına inanıyordu; bir makinenin "düşünmesi," esasen biçimsel bir dilde ifade edilmiş önermeleri mantık kurallarına göre dönüştürmesi demekti [28]. Bu inanç, LISP'in sembolik ifadeleri (symbolic expressions) birincil veri yapısı olarak benimsemesinin doğrudan nedenidir.

Üçüncü entelektüel kaynak, özyinelemeli fonksiyon kuramıdır. Gödel, Herbrand ve Kleene tarafından geliştirilen özyinelemeli fonksiyon (recursive function) kavramı, hesaplanabilirliğin bir başka biçimsel tanımını sunmaktaydı [26]. McCarthy, LISP'te özyinelemeyi (recursion) temel kontrol mekanizması olarak benimseyerek, dönemin FORTRAN ve COBOL gibi dillerinin döngü (loop) temelli yaklaşımından radikal biçimde ayrılmıştır [1]. Bu tercih, matematiksel zarif olmasının yanı sıra, ağaç yapıları ve iç içe geçmiş veri yapıları üzerinde doğal biçimde işlem yapmayı mümkün kılmıştır.

Dönemin Teknolojik Altyapısı. 1958'de bilgisayar teknolojisi, vakum tüplerinden transistörlere geçiş dönemindeydi. MIT'nin ana bilgisayarı IBM 704, 36-bit kelime uzunluğuna sahip, manyetik çekirdek bellek kullanan büyük bir makineydi [29]. IBM 704'ün bellek mimarisi, LISP'in temel veri yapısını doğrudan etkilemiştir: makinenin her kelimesi, bir "adres" (address) ve bir "azalma" (decrement) bölümünden oluşuyordu. McCarthy, bu donanım özelliğini kullanarak LISP'in temel liste işleme fonksiyonlarını tasarlamıştır — "car" (Contents of the Address part of Register) ve "cdr" (Contents of the Decrement part of Register) adları doğrudan IBM 704'ün bellek yapısından gelmektedir [9]. Bu durum, bir programlama dilinin donanımla ne kadar iç içe doğabileceğinin çarpıcı bir örneğidir.

Kurumsal Bağlam: MIT'de Yapay Zeka. McCarthy, 1956 Dartmouth Konferansı'nın ardından 1958'de MIT'ye geçerek Marvin Minsky ile birlikte MIT Yapay Zeka Projesi'ni (daha sonra MIT AI Lab olacak) kurmuştur [7]. Bu proje, ABD Savunma Bakanlığı'nın Araştırma Projeleri Ajansı (ARPA, sonradan DARPA) tarafından fonlanıyordu ve o dönemde bilgisayar bilimi araştırmalarının en önemli mali kaynağı buydu [16]. ARPA finansmanının görece esnek yapısı — belirli ürünler yerine genel araştırma kapasitesini desteklemesi — McCarthy'ye LISP gibi temel araştırma projelerine odaklanma özgürlüğü tanımıştır. MIT AI Lab, kısa sürede dünyanın en etkili yapay zeka araştırma merkezlerinden birine dönüşecek ve LISP, bu merkezin ortak dili olacaktır.

Rekabet Eden Yaklaşımlar. LISP'in doğduğu dönemde, yapay zeka programlaması için birkaç alternatif yaklaşım mevcuttu. Newell, Shaw ve Simon'ın IPL'si (Information Processing Language), liste işleme kavramını ilk kez yazılıma taşımıştı; ancak düşük seviyeli bir montaj dili (assembly language) uzantısı olarak kalıyordu ve programcıdan bellek yönetimini elle yapmasını bekliyordu [6]. FORTRAN, bilimsel hesaplama için güçlüydü ama sembolik işleme kapasitesi yoktu [5]. COBOL, iş dünyası uygulamaları için tasarlanmıştı ve yapay zeka araştırmalarıyla hiçbir ilgisi yoktu. Bu boşluk, McCarthy'nin LISP'i tasarlamasının doğrudan nedenlerinden biriydi: mevcut dillerin hiçbiri, yapay zeka araştırmacılarının ihtiyaç duyduğu sembolik soyutlama, dinamik veri yapıları ve etkileşimli geliştirme ortamını sağlayamıyordu [9].

4. Ana Konu Analizi

4a. LISP'in Temel Mekanizması ve Tasarım Felsefesi

LISP'in tasarımını anlamak için McCarthy'nin temel sorusunu kavramak gerekmektedir: "Matematiksel olarak zarif ve yapay zeka araştırmaları için yeterince güçlü bir programlama dili nasıl olmalıdır?" [1]. McCarthy'nin yanıtı, birkaç radikal tasarım kararına dayanmaktadır.

S-İfadeleri ve Homoikoniklik. LISP'in en devrimci özelliği, programların ve verilerin aynı yapıda — iç içe geçmiş listeler biçiminde — temsil edilmesidir. Bu özellik "homoikoniklik" (homoiconicity) olarak adlandırılır [1]. Bir LISP programı, LISP'in kendi veri yapıları kullanılarak ifade edilir; bu da bir programın kendi kodunu veri olarak inceleyebilmesi, değiştirebilmesi ve yeni kod üretebilmesi anlamına gelir. Bu özellik, yapay zeka araştırmaları için kritik öneme sahiptir: bir yapay zeka sistemi kendi davranışını analiz edebilmeli, öğrenme sürecinde kendi stratejilerini değiştirebilmelidir [13]. Homoikoniklik, bu tür "meta-bilişsel" yeteneklerin programlama düzeyinde doğal biçimde ifade edilmesini sağlamıştır.

Koşullu İfadeler. McCarthy, LISP'i tasarlarken bilgisayar bilimine "koşullu ifade" (conditional expression) kavramını kazandırmıştır [30]. Bugün "if-then-else" yapısı olarak bilinen bu mekanizma, McCarthy'den önce programlama dillerinde mevcut değildi. FORTRAN'ın "aritmetik if" yapısı, bir sayının negatif, sıfır veya pozitif olmasına göre dallanma sağlıyordu; ancak McCarthy'nin koşullu ifadesi, herhangi bir Boolean koşuluna göre farklı değerler döndürebilen genel bir yapıydı [9]. Bu yenilik, LISP'in ötesinde tüm modern programlama dillerini etkilemiştir.

Çöp Toplama (Garbage Collection). LISP, bilgisayar bilimi tarihinde otomatik bellek yönetimi — "çöp toplama" (garbage collection) — uygulayan ilk dildir [10]. IPL gibi dillerde programcı, artık kullanılmayan bellek alanlarını elle serbest bırakmak zorundaydı; bu süreç hem zahmetli hem de hataya açıktı. McCarthy, LISP yorumlayıcısına otomatik bir çöp toplayıcı ekleyerek programcıyı bu yükten kurtarmıştır [9]. Bu yenilik, bugün Java, Python, Go ve JavaScript dahil modern dillerin büyük çoğunluğunun temelini oluşturmaktadır.

Eval Fonksiyonu: Beklenmedik Keşif. LISP'in tarihindeki en çarpıcı an, "eval" (değerlendirme) fonksiyonunun keşfidir. McCarthy, 1960 makalesinde LISP'in teorik temellerini açıklarken, dilin tüm ifadelerini değerlendirebilen evrensel bir fonksiyon tanımlamıştır [1]. Bu fonksiyon — eval — tamamen matematiksel bir soyutlama olarak düşünülmüştü; McCarthy, bunun fiilen çalışan bir yorumlayıcıya (interpreter) dönüştürülebileceğini amaçlamamıştı. Ancak lisansüstü öğrencisi Steve Russell, eval fonksiyonunun tanımını eline alarak doğrudan IBM 704'ün makine koduna çevirmiştir [9]. McCarthy, bu gelişmeyi şöyle aktarmıştır: "Steve Russell, eval'ı makine koduna çevirebileceğini söyledi ve ben de bunun saçma olduğunu, karıştırdığını düşündüm — teori ile pratik farklıydı. Ama o haklı çıktı" [9]. Russell'ın bu eylemi, LISP'i kağıt üzerindeki bir matematiksel notasyondan çalışan bir programlama diline dönüştürmüştür. Bu an, bilgisayar bilimi tarihinin en verimli "yanlış anlamaları"ndan biri olarak kabul edilmektedir [8].

REPL: Etkileşimli Programlama. Eval fonksiyonunun çalışır hale gelmesi, bir başka yeniliği doğurmuştur: Read-Eval-Print Loop (REPL) — Oku-Değerlendir-Yazdır Döngüsü [10]. REPL, programcının bir ifade yazmasını, bilgisayarın bu ifadeyi hemen değerlendirmesini ve sonucu ekrana yazmasını sağlayan etkileşimli bir geliştirme ortamıdır. Dönemin standart programlama pratiği, kartlara delikler açmak, kartları bilgisayara yüklemek, saatlerce sonuç beklemek ve hataları bir sonraki turda düzeltmekti [29]. REPL, bu yavaş ve zahmetli süreci, anlık geri bildirimle değiştirmiş ve yapay zeka araştırmacılarına fikirlerini hızla deneyebilecekleri bir ortam sunmuştur. Bu etkileşimli programlama modeli, bugün Python, JavaScript ve Julia gibi dillerin temel özelliğidir.

4b. Kilit Aktörler ve Katkıları

John McCarthy (1927–2011), LISP'in yaratıcısı ve yapay zekanın kurucu babalarından biridir. McCarthy, Boston'da İrlandalı ve Litvanyalı göçmen bir ailenin çocuğu olarak doğmuş, Caltech'te matematik okumuş ve Princeton'da Alonzo Church'ün danışmanlığında doktora yapmıştır [31]. Dartmouth Konferansı'nı organize eden dört kişiden biri olan McCarthy, yapay zeka teriminin mucidi olarak kabul edilmektedir [3]. MIT'de LISP'i geliştirdikten sonra 1962'de Stanford'a geçerek Stanford Yapay Zeka Laboratuvarı'nı (SAIL) kurmuştur [31]. McCarthy, yalnızca LISP'i değil, zaman paylaşımı (time-sharing) kavramını da erken dönemde savunan kişilerden biridir — bu fikir, bilgisayarların etkileşimli kullanımının temelini oluşturmuştur [32]. 1971'de Turing Ödülü'nü almıştır.

Steve Russell, eval fonksiyonunu makine koduna çevirerek LISP'i çalışan bir dile dönüştüren kişidir. Russell, MIT'de lisansüstü öğrenci olarak McCarthy'nin grubunda çalışmaktaydı [9]. Onun katkısı, LISP tarihinin en kritik anlarından birini temsil eder: teorik bir yapıyı pratik bir araca dönüştürmek. Russell, daha sonra MIT'deki "Spacewar!" (1962) adlı ilk bilgisayar oyunlarından birinin de yaratıcıları arasında yer alacaktır [33].

Timothy Hart ve Michael Levin, LISP'in ilk resmi kılavuzunu — LISP 1.5 Programmer's Manual (1962) — McCarthy ile birlikte yazmışlardır [34]. Hart ayrıca LISP'in makro sisteminin ilk versiyonunu geliştirmiştir; makrolar, LISP'in metaprogramlama yeteneklerinin en güçlü aracı olarak dilin kimliğini tanımlayan bir özellik haline gelecektir [10].

Daniel Edwards, LISP'in ilk çöp toplayıcısını (garbage collector) yazmıştır [9]. Edwards'ın mark-and-sweep (işaretle ve süpür) algoritması, otomatik bellek yönetiminin ilk pratik uygulamasıdır ve bugün hâlâ çöp toplama algoritmalarının temel kategorilerinden birini oluşturmaktadır.

Kurumsal Ağ. LISP, MIT AI Lab'ın çatısı altında geliştirilmiş olup, ARPA (Advanced Research Projects Agency) fonlamasıyla desteklenmiştir [16]. IBM 704 ve ardılı IBM 7090, LISP'in ilk çalıştığı donanım platformlarıdır [29]. MIT dışında, McCarthy'nin 1962'de kurduğu Stanford AI Lab (SAIL) ve Carnegie Mellon Üniversitesi, LISP'in erken dönem gelişimine katkı sağlayan başlıca kurumlardır [10].

4c. Dönem İçindeki Yeri

LISP'in 1958–1962 arasındaki gelişimi, yapay zeka araştırmalarının "altın çağı"nın başlangıcına denk gelmektedir [16]. Bu dönemde, araştırmacılar arasında güçlü bir iyimserlik hakimdi: insan düzeyinde yapay genel zekanın on ila yirmi yıl içinde gerçekleştirilebileceğine inanılıyordu [35]. LISP, bu iyimserliğin somut bir aracı olmuştur — artık araştırmacıların fikirlerini hızla kodlayıp test edebilecekleri güçlü bir dil vardı.

LISP, yapay zeka topluluğu tarafından hızla benimsenmiştir. MIT, Stanford ve Carnegie Mellon'daki YZ laboratuvarları, LISP'i ana programlama dilleri olarak kabul etmiştir [10]. Bu dil, doğal dil işleme (Weizenbaum'un ELIZA'sı, 1966), teorem kanıtlama, planlama (STRIPS, 1971) ve bilgi temsili gibi alanlarda standart araç haline gelmiştir [13]. LISP'in etkileşimli geliştirme ortamı — REPL, hata ayıklayıcılar, artımlı derleme — araştırmacıların deneysel çalışma biçimini kökten değiştirmiştir: hipotezler hızla kodlanıp test edilebilir, başarısız denemeler anında düzeltilebilir hale gelmiştir [10].

Ancak LISP'in benimsenmesi evrensel değildi. Dilin parantez ağırlıklı sözdizimi, yeni kullanıcılar için öğrenme eğrisini dikleştiriyordu [22]. Daha önemlisi, LISP'in yorumlama (interpretation) tabanlı çalışma biçimi, FORTRAN gibi derlenen (compiled) dillere kıyasla önemli performans dezavantajları yaratıyordu [10]. Bu performans farkı, LISP'in yalnızca YZ araştırma laboratuvarlarında — büyük ve pahalı bilgisayarlara erişimi olan merkezlerde — kullanılmasını, endüstriyel uygulamalarda ise uzun süre benimsenmemesini beraberinde getirmiştir.

4d. Genel YZ Tarihindeki Yeri

LISP'in yapay zeka tarihindeki konumu, birkaç katmanlı bir analizle kavranabilir.

Birincisi, LISP sembolik yapay zeka paradigmasının (symbolic AI) ana aracı olmuştur. 1960'lardan 1980'lere kadar yapay zeka araştırmalarına hakim olan sembolik yaklaşım — bilgiyi açık semboller ve kurallar biçiminde temsil eden ve mantıksal çıkarım yoluyla işleyen yaklaşım — LISP üzerine inşa edilmiştir [18]. Uzman sistemler (expert systems), bilgi tabanlı sistemler (knowledge-based systems) ve mantık programlama (logic programming) gibi alt alanların tamamı, LISP'in sağladığı sembolik işleme altyapısından beslenmiştir.

İkincisi, LISP bilgisayar bilimine kalıcı kavramlar kazandırmıştır. Otomatik bellek yönetimi (garbage collection), koşullu ifadeler (if-then-else), özyineleme (recursion) temelli kontrol akışı, ağaç veri yapıları, dinamik tipleme (dynamic typing), yüksek dereceli fonksiyonlar (higher-order functions), kapanışlar (closures) ve REPL — tüm bu kavramlar ilk kez LISP'te ortaya çıkmış ya da LISP tarafından popülerleştirilmiştir [10]. Bu yeniliklerin çoğu, bugün Python, JavaScript, Ruby, Scala ve Haskell gibi modern dillerin temel özelliklerini oluşturmaktadır.

Üçüncüsü, LISP olmadan sonraki birçok önemli gelişme mümkün olmazdı ya da çok farklı biçimde gerçekleşirdi. Weizenbaum'un ELIZA'sı (1966) LISP'te yazılmıştı [36]. SHRDLU (1970), doğal dil anlama alanındaki çığır açıcı sistem, LISP üzerine inşa edilmişti [37]. 1980'lerin uzman sistem patlaması — MYCIN, DENDRAL, R1/XCON — büyük ölçüde LISP tabanlıydı [13]. Hatta özel LISP bilgisayarları — "LISP makineleri" — 1970'ler ve 1980'lerde ayrı bir donanım endüstrisi oluşturmuştur [10].

5. Eleştirel Değerlendirme

LISP'e yöneltilen eleştirileri birkaç kategoride değerlendirmek gerekmektedir.

Sözdizimsel Eleştiriler. LISP'in parantez ağırlıklı sözdizimi, dilin en sık eleştirilen yönüdür. "Lots of Irritating Superfluous Parentheses" (Çok Sayıda Sinir Bozucu Gereksiz Parantez) şeklindeki esprili açılım, programcı kültüründe yaygın biçimde dolaşmaktadır [21]. Ancak bu eleştiri yüzeyseldir: parantezler, LISP'in homoikonik yapısının zorunlu bir sonucudur ve dilin en güçlü özelliklerini — makrolar, kod dönüşümleri, metaprogramlama — mümkün kılmaktadır [14]. Parantez eleştirisi, esasen sözdizimsel alışkanlıkla ilgilidir; LISP deneyimli programcılar, parantezlerin görünmez hale geldiğini ve yapının netliğinin avantaj sağladığını belirtmektedir.

Performans Eleştirileri. 1960'lar ve 1970'lerde LISP'in performansı, derlenmiş dillere kıyasla önemli ölçüde düşüktü [10]. Bu durum, LISP'in yalnızca araştırma laboratuvarlarında kullanılmasının ve endüstriyel uygulamalara geçişinin gecikmesinin temel nedenlerinden biriydi. Ancak zaman içinde LISP derleyicilerinin kalitesi önemli ölçüde artmış ve modern Common Lisp uygulamaları, C'ye yakın performans düzeylerine ulaşabilmiştir [10].

"Doğruyu Yapma" Hastalığı. Gabriel (1991), LISP topluluğunun "MIT yaklaşımı" ile "New Jersey yaklaşımı" arasındaki gerilimi analiz etmiştir [22]. MIT yaklaşımı — tam doğruluk, tam tutarlılık, tam genellik — LISP topluluğunun tasarım felsefesini temsil ediyordu. Gabriel, bu mükemmeliyetçiliğin LISP'in Unix ve C gibi "yeterince iyi" (worse is better) çözümler karşısında geri kalmasına neden olduğunu savunmuştur. Bu eleştiri, yazılım mühendisliği tarihinin en etkili argümanlarından biri olarak kabul edilmektedir.

Sembolik YZ ile Özdeşleşme Riski. LISP'in sembolik yapay zeka paradigmasıyla özdeşleşmesi, hem bir güç hem de bir kırılganlık kaynağı olmuştur [18]. 1980'lerin sonunda uzman sistem balonu patladığında ve yapay zeka araştırmaları ikinci "YZ kışı"na girdiğinde, LISP de bu düşüşten doğrudan etkilenmiştir [16]. LISP makineleri endüstrisi çökmüş, birçok YZ şirketi kapanmış ve LISP, "başarısız bir paradigmanın dili" olarak etiketlenmiştir. Bu algı, büyük ölçüde haksızdı — LISP'in teknik yenilikleri paradigmadan bağımsız olarak değerliydi — ancak piyasa algısı teknik gerçekliğin önüne geçmiştir.

Bugünden Bakıldığında. McCarthy'nin LISP'teki temel tasarım kararlarının çoğu, zaman içinde doğrulanmıştır. Otomatik bellek yönetimi, 1958'de "kaynak israfı" olarak eleştirilirken bugün neredeyse tüm modern dillerin standart özelliğidir [10]. Fonksiyonel programlama, 2010'lardan itibaren ana akım yazılım geliştirmede yeniden yükselişe geçmiştir. REPL tabanlı etkileşimli geliştirme, Python ve Jupyter Notebook ekosistemiyle milyonlarca geliştirici tarafından kullanılmaktadır. McCarthy'nin "yanlış" bulduğu tek büyük karar, LISP'in dinamik kapsam (dynamic scoping) kullanmasıydı; bu hata, Sussman ve Steele'in Scheme'inde (1975) sözcüksel kapsam (lexical scoping) ile düzeltilmiştir [19].

6. Etik ve Toplumsal Boyutlar

LISP'in etik ve toplumsal boyutları, ilk bakışta bir programlama dilinin doğrudan etki alanının dışında görünebilir; ancak daha derin bir analiz, birkaç önemli boyutu ortaya koymaktadır.

Erişim Eşitsizliği. LISP, 1960'lar ve 1970'lerde yalnızca ARPA fonlaması alan seçkin üniversitelerde — MIT, Stanford, Carnegie Mellon — erişilebilir durumdaydı [16]. LISP çalıştırabilecek bilgisayarlar pahalıydı ve YZ araştırmaları büyük ölçüde ABD askeri fonlamasına bağımlıydı. Bu durum, yapay zeka araştırmalarının coğrafi ve kurumsal olarak dar bir tabana sıkışmasına yol açmıştır. Birleşik Krallık, Avrupa ve Japonya'daki araştırmacılar, ABD'deki meslektaşlarının sahip olduğu kaynaklara uzun süre erişememiştir [16]. Bu erişim eşitsizliği, yapay zeka araştırmalarının erken dönemde Anglo-Amerikan merkezli bir alan olarak şekillenmesine katkıda bulunmuştur.

Askeri Fonlama ve Etik Sorunlar. LISP'in geliştirildiği MIT AI Lab, ARPA tarafından fonlanıyordu ve ARPA'nın temel amacı, ABD'nin Soğuk Savaş'taki teknolojik üstünlüğünü sürdürmekti [16]. Bu durum, yapay zeka araştırmalarının — ve dolayısıyla LISP'in — askeri amaçlarla yakın ilişkisini gündeme getirmektedir. 1960'lar ve 1970'lerde, MIT öğrencileri ve araştırmacıları arasında Vietnam Savaşı bağlamında askeri fonlamanın etik boyutları tartışılmıştır [38]. Bu tartışma, teknoloji geliştirme sürecinde fonlama kaynağının etik sorumluluğu meselesini erken dönemde gündeme getirmiştir.

Bilgi Temsili ve Güç. LISP'in sağladığı sembolik bilgi temsili yeteneği, "bilgiyi kim tanımlar, nasıl kodlar ve kimin erişimine sunar?" sorusunu doğurmaktadır. Uzman sistemler döneminde (1980'ler), insan uzmanların bilgisi LISP tabanlı sistemlere kodlanarak kurumsal karar alma süreçlerinde kullanılmıştır [13]. Bu süreç, bilginin standartlaştırılması ve otomasyonu anlamına geliyordu; ancak kimin bilgisinin kodlanacağı, hangi perspektifin "uzman bilgisi" olarak kabul edileceği ve otomatik kararların hesap verebilirliği gibi sorular yeterince tartışılmamıştır.

Hacker Etiği ve Açık Bilgi. LISP, MIT AI Lab'da gelişen "hacker etiği"nin — bilgiye serbest erişim, merkeziyetsizlik, teknolojinin demokratikleştirilmesi — temel aracı olmuştur [39]. Bu kültür, daha sonra özgür yazılım (free software) ve açık kaynak (open source) hareketlerinin entelektüel temelini oluşturacaktır. Richard Stallman, GNU Projesi'ni başlatırken MIT AI Lab'daki LISP kültüründen doğrudan etkilenmiştir; nitekim GNU'nun ilk önemli uygulamalarından biri, GNU Emacs adlı LISP tabanlı metin editörüdür [40].

7. Güncel Uygulamalar ve Miras

LISP'in mirası, günümüz teknoloji dünyasında birçok katmanda varlığını sürdürmektedir.

Doğrudan Devam Eden Kullanım. Common Lisp, endüstriyel uygulamalarda hâlâ kullanılmaktadır. Grammarly'nin doğal dil işleme altyapısı, ITA Software'in (Google tarafından satın alınan) uçuş arama motoru ve bazı finans sektörü uygulamaları Common Lisp ile geliştirilmiştir [41]. Clojure (2007), Rich Hickey tarafından yaratılan modern bir LISP lehçesi olarak JVM (Java Virtual Machine) üzerinde çalışmakta ve özellikle eşzamanlı programlama ve veri işleme alanlarında kullanılmaktadır [20]. Racket (eski adıyla PLT Scheme), bilgisayar bilimi eğitiminde ve dil tasarımı araştırmalarında etkin biçimde kullanılmaktadır [42]. Emacs Lisp, GNU Emacs metin editörünün yapılandırma ve genişletme dili olarak milyonlarca geliştirici tarafından kullanılmaktadır [40].

Dolaylı Kavramsal Miras. LISP'in en derin mirası, doğrudan kullanımından çok, modern programlama dillerine aktardığı kavramlarda yatmaktadır. Python'un liste kavrayışları (list comprehensions), birinci sınıf fonksiyonları ve dinamik tiplemesi; JavaScript'in kapanışları (closures) ve fonksiyonel programlama özellikleri; Ruby'nin blok yapısı ve metaprogramlama yetenekleri; Haskell'in tembel değerlendirmesi (lazy evaluation) ve yüksek dereceli fonksiyonları — tüm bunlar LISP'in entelektüel mirasının izlerini taşımaktadır [10]. Java ve C#'ın çöp toplayıcıları, LISP'in 1958'de başlattığı otomatik bellek yönetimi geleneğinin doğrudan devamıdır.

Akademik Miras. LISP, fonksiyonel programlama, programlama dili teorisi, derleyici tasarımı ve metaprogramlama gibi araştırma alanlarının doğmasına veya olgunlaşmasına katkıda bulunmuştur [10]. Scheme üzerinden geliştirilen denotasyonel anlambilim (denotational semantics) çalışmaları, programlama dillerinin matematiksel temellerini anlamada kritik rol oynamıştır [19]. MIT'nin SICP dersi, bilgisayar bilimi eğitiminde paradigma belirleyici bir model oluşturmuştur [12].

Yapay Zeka Bağlamında Güncel Durum. Günümüzde yapay zeka araştırmalarının ağırlığı, LISP tabanlı sembolik yaklaşımlardan Python tabanlı makine öğrenmesi ve derin öğrenme yaklaşımlarına kaymıştır [18]. Ancak sembolik YZ'nin tamamen terk edildiğini söylemek doğru olmaz: nöro-sembolik yapay zeka (neuro-symbolic AI) adı verilen yeni bir araştırma programı, derin öğrenmenin örüntü tanıma gücünü sembolik sistemlerin mantıksal çıkarım yeteneğiyle birleştirmeyi hedeflemektedir [43]. Bu program, LISP'in temsil ettiği sembolik geleneğin, farklı bir biçimde de olsa, yapay zekanın geleceğinde hâlâ rol oynayabileceğini göstermektedir.

8. Bölüm Özeti

1958 yılında John McCarthy tarafından MIT'de geliştirilen LISP, yapay zeka tarihinin en etkili programlama dilidir. Alonzo Church'ün lambda hesabından, sembolik mantık geleneğinden ve özyinelemeli fonksiyon kuramından beslenen LISP, birçok devrimci yenilik getirmiştir: homoikoniklik (kod ve verinin aynı yapıda temsili), otomatik bellek yönetimi (çöp toplama), koşullu ifadeler (if-then-else), yüksek dereceli fonksiyonlar ve etkileşimli programlama ortamı (REPL). Steve Russell'ın eval fonksiyonunu makine koduna çevirmesiyle teorik bir matematiksel notasyondan çalışan bir programlama diline dönüşen LISP, sonraki otuz yıl boyunca yapay zeka araştırmalarının "lingua franca"sı olmuştur.

LISP'in önemi, yalnızca yapay zeka alanıyla sınırlı değildir. Dilin bilgisayar bilimine kazandırdığı kavramlar — çöp toplama, REPL, fonksiyonel programlama, makro sistemler — bugün Python, JavaScript, Java ve diğer modern dillerin temel özelliklerini oluşturmaktadır. Ancak LISP'in sembolik YZ paradigmasıyla özdeşleşmesi, YZ kışları döneminde dilin itibar kaybına yol açmıştır. Bugün LISP, Clojure, Racket ve Common Lisp lehçeleriyle yaşamaya devam etmekte ve nöro-sembolik YZ araştırmaları, sembolik geleneğin yeni bir bağlamda yeniden değerlendirilmesine zemin hazırlamaktadır.

Bu bölüm, kitabın genel argümanı çerçevesinde, Dartmouth Konferansı'nda (Bölüm 16) filizlenen sembolik yapay zeka vizyonunun, LISP ile somut bir programlama aracına kavuştuğunu göstermiştir. Bir sonraki bölümde ele alacağımız Arthur Samuel'in makine öğrenmesi çalışmaları, LISP'in temsil ettiği sembolik-mantıksal yaklaşıma alternatif bir yol — veriden öğrenme yolu — sunarak yapay zeka tarihindeki temel gerilimin bir başka yüzünü aydınlatacaktır.

9. Kaynakça

[1] McCarthy, J. (1960). Recursive functions of symbolic expressions and their computation by machine, Part I. Communications of the ACM, 3(4), 184–195. https://doi.org/10.1145/367177.367199

[2] Backus, J. W. et al. (1957). The FORTRAN automatic coding system. Proceedings of the Western Joint Computer Conference, 188–198.

[3] McCarthy, J., Minsky, M. L., Rochester, N., & Shannon, C. E. (1955). A proposal for the Dartmouth Summer Research Project on Artificial Intelligence. AI Magazine, 27(4), 12–14. (Yeniden basım, 2006).

[4] Crevier, D. (1993). AI: The tumultuous history of the search for artificial intelligence. Basic Books.

[5] Sammet, J. E. (1969). Programming languages: History and fundamentals. Prentice-Hall.

[6] Newell, A., & Shaw, J. C. (1957). Programming the Logic Theory Machine. Proceedings of the Western Joint Computer Conference, 230–240.

[7] Slagle, J. R. (1963). A heuristic program that solves symbolic integration problems in freshman calculus. Journal of the ACM, 10(4), 507–520.

[8] Graham, P. (2004). Hackers & painters: Big ideas from the computer age. O'Reilly Media.

[9] McCarthy, J. (1978). History of LISP. ACM SIGPLAN Notices, 13(8), 217–223. https://doi.org/10.1145/960118.808387

[10] Steele, G. L., & Gabriel, R. P. (1993). The evolution of Lisp. ACM SIGPLAN Notices, 28(3), 231–270. https://doi.org/10.1145/155360.155373

[11] Graham, P. (2002). The roots of Lisp. Yayımlanmamış makale. http://www.paulgraham.com/rootsoflisp.html

[12] Abelson, H., & Sussman, G. J. (1996). Structure and interpretation of computer programs (2. baskı). MIT Press.

[13] Norvig, P. (1992). Paradigms of artificial intelligence programming: Case studies in Common Lisp. Morgan Kaufmann.

[14] Graham, P. (1993). On Lisp: Advanced techniques for Common Lisp. Prentice Hall.

[15] McCorduck, P. (2004). Machines who think: A personal inquiry into the history and prospects of artificial intelligence (2. baskı). A K Peters.

[16] Crevier, D. (1993). AI: The tumultuous history of the search for artificial intelligence. Basic Books.

[17] Nilsson, N. J. (2010). The quest for artificial intelligence: A history of ideas and achievements. Cambridge University Press.

[18] Russell, S., & Norvig, P. (2021). Artificial intelligence: A modern approach (4. baskı). Pearson.

[19] Sussman, G. J., & Steele, G. L. (1975). Scheme: An interpreter for extended lambda calculus. MIT AI Lab Memo 349. MIT.

[20] Hickey, R. (2008). The Clojure programming language. Proceedings of the 2008 Symposium on Dynamic Languages, 1–1. https://doi.org/10.1145/1408681.1408682

[21] Steele, G. L. (1990). Common Lisp: The language (2. baskı). Digital Press.

[22] Gabriel, R. P. (1991). Lisp: Good news, bad news, how to win big. AI Expert, 6(6), 31–39.

[23] Nabiyev, V. V. (2021). Yapay zeka: İnsan-bilgisayar etkileşimi (6. baskı). Seçkin Yayıncılık.

[24] Akın, H. L. (2006). Yapay zeka ve yapay sinir ağları. Seçkin Yayıncılık.

[25] Church, A. (1936). An unsolvable problem of elementary number theory. American Journal of Mathematics, 58(2), 345–363.

[26] Kleene, S. C. (1952). Introduction to metamathematics. North-Holland.

[27] Whitehead, A. N., & Russell, B. (1910–1913). Principia Mathematica (Cilt 1–3). Cambridge University Press.

[28] McCarthy, J. (1959). Programs with common sense. Proceedings of the Teddington Conference on the Mechanization of Thought Processes, 75–91.

[29] Ceruzzi, P. E. (2003). A history of modern computing (2. baskı). MIT Press.

[30] McCarthy, J. (1960). A basis for a mathematical theory of computation. Proceedings of the Western Joint Computer Conference, 225–238.

[31] McCarthy, J. (Kişisel web sitesi). Stanford University. http://www-formal.stanford.edu/jmc/

[32] McCarthy, J. (1962). Time-sharing computer systems. Management and the Computer of the Future, 221–236. MIT Press.

[33] Graetz, J. M. (1981). The origin of Spacewar. Creative Computing, 7(8), 56–67.

[34] McCarthy, J., Abrahams, P. W., Edwards, D. J., Hart, T. P., & Levin, M. I. (1962). LISP 1.5 programmer's manual. MIT Press.

[35] Simon, H. A., & Newell, A. (1958). Heuristic problem solving: The next advance in operations research. Operations Research, 6(1), 1–10.

[36] Weizenbaum, J. (1966). ELIZA—A computer program for the study of natural language communication between man and machine. Communications of the ACM, 9(1), 36–45.

[37] Winograd, T. (1972). Understanding natural language. Cognitive Psychology, 3(1), 1–191.

[38] Leslie, S. W. (1993). The Cold War and American science: The military-industrial-academic complex at MIT and Stanford. Columbia University Press.

[39] Levy, S. (1984). Hackers: Heroes of the computer revolution. Anchor Press/Doubleday.

[40] Stallman, R. M. (1981). EMACS: The extensible, customizable self-documenting display editor. ACM SIGPLAN Notices, 16(6), 147–156.

[41] Seibel, P. (2005). Practical Common Lisp. Apress.

[42] Felleisen, M., Findler, R. B., Flatt, M., & Krishnamurthi, S. (2018). How to design programs (2. baskı). MIT Press.

[43] Marcus, G. (2020). The next decade in AI: Four steps towards robust artificial intelligence. arXiv preprint arXiv:2002.06177.

10. Tartışma Soruları

1. Analitik: McCarthy, LISP'i tasarlarken neden lambda hesabını temel almıştır? Turing makinesi modeli yerine Church'ün fonksiyonel modelini tercih etmesinin yapay zeka araştırmaları üzerindeki etkisi ne olmuştur?

2. Karşılaştırmalı: LISP ile aynı dönemde geliştirilen FORTRAN ve IPL arasındaki temel tasarım farkları nelerdir? Bu farklar, her dilin hangi problem türleri için uygun olduğunu nasıl belirlemiştir?

3. Spekülatif: Steve Russell, eval fonksiyonunu makine koduna çevirmemiş olsaydı, LISP'in tarihi ve yapay zeka araştırmalarının seyri nasıl farklılaşabilirdi?

4. Etik: LISP'in geliştirilmesinin ARPA (askeri) fonlamasıyla doğrudan ilişkisi, yapay zeka araştırmalarının erken dönemdeki yönelimleri üzerinde nasıl bir etik sorun oluşturmaktadır? Bu sorun günümüzde hangi biçimlerde devam etmektedir?

5. Güncel: LISP'in homoikoniklik özelliği — kodun veri olarak temsil edilmesi — günümüzde hangi teknolojilerde ve programlama pratiklerinde yankı bulmaktadır? Makro sistemlerinin modern yazılım geliştirmedeki karşılığı nedir?

6. Karşılaştırmalı: Gabriel'in "worse is better" (daha kötüsü daha iyidir) argümanı, LISP'in neden C ve Unix karşısında endüstriyel yaygınlık savaşını kaybettiğini açıklamakta ne ölçüde başarılıdır? Bu argümanın günümüz yazılım ekosistemi için geçerliliğini tartışınız.

7. Analitik: LISP'in sembolik yapay zeka paradigmasıyla özdeşleşmesi, dilin 1980'lerin sonundaki YZ kışından neden bu kadar olumsuz etkilenmesine yol açmıştır? Bir programlama dilinin belirli bir paradigmayla özdeşleşmesinin avantajları ve riskleri nelerdir?

8. Spekülatif: Nöro-sembolik yapay zeka (neuro-symbolic AI) yaklaşımı, LISP'in temsil ettiği sembolik geleneğin yeniden canlanması olarak değerlendirilebilir mi? Bu yaklaşımın başarılı olması durumunda LISP veya LISP benzeri diller tekrar ön plana çıkabilir mi?

9. Güncel: Python, günümüzde yapay zeka araştırmalarının fiili standart dili haline gelmiştir. Python'un LISP'ten devraldığı kavramlar nelerdir ve Python'un LISP'e kıyasla avantajları ile dezavantajları nelerdir?

10. Etik: LISP ile geliştirilen uzman sistemler, insan uzmanların bilgisini makinelere aktarma iddiası taşımaktaydı. Bu süreçte "kimin bilgisi kodlanır, kimin bilgisi dışarıda kalır?" sorusu yeterince tartışılmış mıdır? Bu sorunun günümüzdeki büyük dil modelleri (LLM) bağlamındaki karşılığı nedir?