Lisp | ||
İlk versiyonun tarihi | 1958 | |
---|---|---|
Paradigmalar | işlevsel , zorunlu | |
Yazar | John McCarthy | |
Yazıyor | dinamik | |
Lehçeler | Ortak Lisp , Emacs Lisp , Şema , Clojure | |
Tarafından etkilenmiş | Bilgi İşleme Dili | |
İşletim sistemi | Çapraz platform | |
Lisp en eski aile hem zorunlu ve fonksiyonel programlama dilleri . Başlangıçta programları temsil etmek için pratik bir model olarak geliştirilen (Turing'in makinesinin teorik kavramının aksine ), 1970'lerde ve 80'lerde yapay zeka araştırmaları için tercih edilen dil haline geldi . Lisp diller kadar birçok alanda bugün kullanılmakta ve web programlama için finans ve bazı bilgisayar eğitim kurslarına.
Lisp terimi , İngilizce " liste işleme " den türetilmiştir . Lisp'in tüm lehçeleri aynı basit bağlantılı liste işleme operatörlerini paylaşır. Lisp ayrıca, ön ekli gösterimde basit bir sözdizimi , dinamik veri tiplemesi , işlevsel programlama desteği , otomatik bellek yönetimi ve bir veri yapısı olarak kaynak kodunu işleme yeteneği ile ayırt edilir .
Lisp dilleri görünümleriyle hemen tanınır. Kaynak parantez sözdizimi - Program listeleri gibi aynı sözdizimi kullanılarak yazılır S-ifadeleri . Bir programın (veya veri yapısının) her alt ifadesi parantezlerle sınırlandırılmıştır. Bu , Lisp programlarının ayrıştırılmasını büyük ölçüde basitleştirir ve meta programlamayı basitleştirir - başka programlar oluşturan veya mevcut programı değiştiren programların oluşturulması.
Makine dilini ve montaj dilini (veya daha yaygın olarak " assembly ") hariç tutarsak, Lisp yaygın olarak kullanılan diller arasında en eski ikinci dildir ( Fortran'dan hemen sonra ). Lisp, 1960'ların başından beri çok gelişti ve birçok lehçeyi doğurdu.
Lisp dili tarafından icat edilmiştir John McCarthy içinde 1958 o iken Massachusetts Teknoloji Enstitüsü (MIT). 1960 yılında CACM dergisinde "Sembolik İfadelerin Özyinelemeli İşlevleri ve Makineye Göre Hesaplamaları, Bölüm I" başlıklı bir makale yayınladı ; Bölüm II asla yayınlanmadı.
İlk yorumlayıcı bir IBM 704 bilgisayarında çalışıyordu ve bu makineden alınan iki talimat Lisp'in listeleri ayırmak için kullandığı iki ilkel işlem haline geldi:
Bir birinci elemandan ve bir listeden bir liste yapma işlemi not edilir cons.
John McCarthy makalesinde iki sözdizimi sunar: S-ifadeleri (bazen " sexp " olarak adlandırılan sembolik ifadeler ) ve M-ifadeleri ( homoisitenin S-ifadelerini işleyen fonksiyonları ifade etmesine izin veren meta -ifadeler, başka bir deyişle yansımayı vurgulamak için ). M-ifadeleri hiç bu kadar popüler olmamıştı ve bugünlerde Lisps'in çoğu hem programlar hem de veriler için S-ifadelerini kullanıyor. Lisp'in parantez bolluğunu eleştirmesine neden olan, S-ifadelerinin sözdizimidir, ancak aynı zamanda dilin gücü ve esnekliğinin nedenlerinden biridir.
Etkileyiciliği ve esnekliği nedeniyle Lisp, yapay zeka topluluğunda çok başarılıydı (bkz. Katkılar).
Gelen 1970'lerin , Lisp programlarının yürütülmesi konusunda uzmanlaşmış bilgisayarlar yaratıldı: Lisp makineleri .
Sırasında 1980 ve 1990'larda , büyük çabalar ortaya çıkmıştı Lisp birçok lehçeleri birleştirmeye yapılmıştır. Sonuç, ANSI standardı “ANSI X3.226-1994 Bilgi Teknolojisi Programlama Dili Common Lisp ” referansı altında 1994 yılında yayınlanan Common Lisp'in standardizasyonu oldu . ISO 1997'de kendi tarafında yayınlanan standart ISLISP (in) ISO / IEC 13816: 1997 (E) , standart tarafından 2007 yılında revize ISO / IEC 13816: 2007 (E) . O zamanlar Lisp, altın çağındakinden çok daha az gelişiyordu.
Makineye yakın diller (C, C ++) veya daha yapılandırılmış ve yazılmış diller ( Haskell ) tarafından gölgelenmesine rağmen , Lisp nispeten kullanılan bir dil olmaya devam ediyor, özellikle de uygulamalara gömülü bir dil olarak dil uzantısı . Lisp'in en tanınmış gömülü kullanım durumları metin editörü olan Emacs ve dil AutoLISP (in) arasında AutoCAD . Ayrıca, Lisp'in Debian işletim sisteminde yayınlanan 8.600 kaynak paketini uygulamak için kullanılan kod satırları açısından dördüncü sırada yer aldığını da belirtmek gerekir .Haziran 2005. İlk sekiz dil şu şekilde dağıtılır: C (% 57), C ++ (% 16,8), Shell (% 9), Lisp (% 3), Perl (% 2,8), Python (% 1,8), Java (% 1.6), Fortran (% 1.2). İçindeTemmuz 2013Lisp 15 yerleştirilir inci pozisyonuna TIOBE indeksi . Temmuz 2020 yılında 34 sırada th .
Listeler parantezlerle sınırlandırılır ve öğeleri boşluklarla ayrılır: (1 2 " foo ") . Bir Lisp programı, listelerden oluşan bir sözdizimi ağacıdır . Parantezlerin bu şekilde kullanılması, LISP kısaltmasının kullanılmasıyla alay konusu olmaya yol açar: " Lots of Irritating and Aptal Parantez " veya " Lots of Insipid and Aptal Parantez " tatsız ve aptal ") veya" Aptalca Parantezli Bilgisayar Dili "veya" Tatsız Dil Doymuş Parantezli ".
Lisp ifade odaklı bir dildir: "ifadeler" ve "talimatlar" arasında birçok dilde olduğu gibi (örneğin Pascal ) ayrım yapmaz ; her şey ifadedir ve bir değer veya bir dizi değer döndürür.
Lisp ifadelerinin çoğu işlev uygulamalarıdır. Başka hangi diller yazıyor
f(a,b,c)Lisp yazıyor
(f a b c)Yani bir miktar yazılmaz
1+2+3+4veya
somme(1,2,3,4)Fakat
(+ 1 2 3 4)Aynı önekli gösterim ( Lehçe gösterimi olarak bilinir ) "özel şekiller" ve "makrolar" için kullanılır: listedeki ilk öğe, bu durumlarda, sonraki öğelerin nasıl işleneceğini belirler. Bir ifade, birinci öğenin doğasına bağlı olarak bir işlev uygulaması, özel bir form veya bir makro uygulaması olabilir.
Lisp dili, minimum kavram kullanan çok basit ve zarif bir sözdizimine sahiptir. Bu kavram ekonomisi, Gregory Chaitin'i bu sözdizimini "matematiksel ihtişamın mücevheri ve katı entelektüel güzelliğin bir mücevheri" olarak nitelendirmesine yol açar .
Tersine, hata tespitine izin vermez.
Lisp dilinin çoğu yalnızca üç EBNF kuralıyla tanımlanır :
list -> '(' expression* ')' expression -> atom | list atom -> number | name | string | operatorBu kurallar aşağıdaki şekilde Fransızca olarak tercüme edilebilir:
Aşağıdaki programlar gerçek Lisp programlarına özgü değildir. Lisp'e bilgisayar derslerinde yaptığımız tipik sunumlardır. Örnekler, Common Lisp sözdiziminde verilmiştir .
Faktöriyel harika bir klasik:
(defun factorial (n) "Calcule la factorielle de l'entier n." (if (<= n 1) 1 (* n (factorial (- n 1)))))Ayrıca daha verimli yazabiliriz (bkz. Terminal özyinelemesi ):
(defun factorial (n &optional (acc 1)) "Calcule la factorielle de l'entier n." (if (<= n 1) acc (factorial (- n 1) (* acc n))))Bir başka tipik örnek, bir listeyi ters çeviren bu işlevdir (Lisp, bu amaç için yerleşik bir ters işlevi vardır ):
(defun reverse (l &optional (acc '())) "Renverse la liste l." (if (null l) acc (reverse (cdr l) (cons (car l) acc))))Şimdiye kadar geliştirilen dijital programlamanın aksine sayılar yerine sembollerle çalışan Lisp, yapay zekayı mümkün kılan farklı bir programlama stili yarattı .
Bu nedenle, örneğin, sözde doğal diyaloglar (cf Eliza , Turing testi ).
Dahası, işlevleri ve programları verileriyle aynı biçime sahiptir ( homoconicity özelliği ).
Bu nedenle Lisp'te aynadan geçebiliriz . Yani,
Uzun bir süre yalnızca yorumlanmış bir dil olarak kalan Lisp dilinin bir özelliği , 1960'ların ve 1970'lerin diğer yorumlanmış dillerinden farklı olarak, yürütülmesinin derlenmiş diller kadar - veya bazen daha hızlı - olmasıdır . Bu özellik, her nesne türünün (işlev, operatör, veri) yerinin öngörülebilir olmasını sağlayan ve yürütme kod dizisini oluşturmadan önce bir kaynak kod dizisinin ön analizini gerektirmeyen sözdiziminden gelir.
Simula'nın etkisi altında, Lisp'ten aşağıdakiler dahil çeşitli nesne sistemleri oluşturuldu:
CLOS, çoklu miras, çoklu seçim ve güçlü bir yöntem kombinasyon sistemi sunar. Common Lisp (CLOS'un da bir parçası olduğu) ilk standartlaştırılmış nesne yönelimli dildir.
“LISP az sayıda güçlü temel kavramlara sahiptir ve diğer her şey bunun üzerine inşa edilmiştir, matematikçilerin çalışma şekli budur; matematiksel teoriler böyle görünür. Bu teoriler, iyi teoriler, bazı yeni anahtar kavramların tanımlanmasından ibarettir ve oradan havai fişekler başlar: yeni yollar ortaya çıkarırlar, radikal bir şekilde yeni dünyalara kapı açarlar. LISP de böyledir; matematiğe çoğu programlama dilinden daha yakındır. En azından eklenen yararlı kısımları ortadan kaldırırsanız, LISP'i kullanışlı bir araç yapan eklemeler . Bunu yaparsanız geriye kalan, LISP'in kavramsal kalbi olan orijinal LISP, matematiksel güzelliğin mücevheri ve sade entelektüel güzelliğin bir mücevheri olan bir kalptir. "
- Gregory Chaitin , Meta Maths: The Quest of Omega , 2006, Atlantic, s. 46
Bugün bazı söyleyebilirim Şema Lisp tarafından açıklanan güzelliği ulaşma türevidir Chaitin ; ve LISP'nin (Maclisp, Interlisp, Zetalisp) geçmiş lehçelerinin büyük küvelerinin doğrudan soyundan gelen Common Lisp'in kavramsal kalbini sağlam tutmasına rağmen dev alet çantasına daha çok eğildiği kesindir .
G. Chaitin bu idealize Lisp'i araştırması için kullandı: Zarif LISP Programları .
En güçlü programlama dili Lisp'dir. Lisp'i (veya onun varyantını, Scheme'yi) bilmiyorsanız, bir programlama dilinin güçlü ve zarif olmasının ne anlama geldiğini bilemezsiniz. Lisp'i öğrendikten sonra, diğer birçok dilde neyin eksik olduğunu göreceksiniz.
Günümüzde özel veri türlerini tanımlamaya odaklanan çoğu dilin aksine, Lisp genel olan birkaç veri türü sağlar. Belirli türleri tanımlamak yerine, bu türlerden yapılar oluşturursunuz. Bu nedenle, bu türden bir listeyi ve bu türden bir listeyi tanımlamak için bir yol sunmak yerine, Lisp her türden veriyi tutabilen bir tür listeye sahiptir.
"En güçlü programlama dili Lisp'dir. Lisp'i (veya onun varyantını, Scheme'yi) bilmiyorsanız, güçlü ve zarif bir programlama dilinin ne olduğunu bilemezsiniz. Lisp'i öğrendikten sonra, diğer dillerin çoğunda neyin eksik olduğunu göreceksiniz.
Günümüzde özel veri türlerini tanımlamaya odaklanan çoğu dilden farklı olarak, Lisp birkaç veri türü sunar, ancak bunlar geneldir. Belirli türleri tanımlamak yerine, onlardan yapılar inşa edersiniz. Bu nedenle, bu türden bir listeyi veya bu türden bir listeyi tanımlamak için bir yöntem sunmak yerine, Lisp her tür veriyi tutabilen bir liste türüne sahiptir. "