Yazılım

Lisp Dili

Lisp (tarihsel olarak, LISP ) ailesidir bilgisayar programlama dilleri uzun bir geçmişi ve kendine özgü bir tam sahip Parantez önek gösterimde . Aslen 1958 yılında belirlenen, Lisp ikinci en eski olan yüksek seviyeli bir programlama dili yaygın kullanımda bugün. Sadece Fortran bir yıl, yaşlıdır. Lisp onun ilk günlerinden beri değişti ve birçok lehçeleri tarihinin üzerinde var olmuştur. Günümüzde en iyi bilinen genel amaçlı Lisp lehçeler olan Clojure , Common Lisp ve Scheme .

Lisp aslında bir pratik olarak oluşturuldu matematiksel gösterimde için bilgisayar programları notasyonu etkilenerek Alonzo Church ‘ın Lambda calculus . Hızla için tercih programlama dili haline yapay zeka (AI) araştırma. En erken programlama dillerinden biri olarak, Lisp birçok fikir öncülük bilgisayar bilimleri dahil ağaç veri yapıları , otomatik depolama yönetimi , dinamik yazarak , Koşullamalar , yüksek mertebeden fonksiyonlar , özyineleme , kendi kendine barındırmayı derleyici ve salt eval baskısı döngü .

Adı LISP “LİSte Processor” türetilmiştir. Bağlı listeler Lisp’in önemli biri veri yapıları ve Lisp kaynak kod listelerinin yapılır. Böylece Lisp programları sebebiyet veren bir veri yapısı olarak kaynak kodunu manipüle edebilir makro programcılar yeni sözdizimi ya da yeni oluşturmasına izin sistemlere etki alanına özgü dilleri Lisp’te gömülü.

Kod ve veri değiştirilebilirliği onun hemen tanınabilir sözdizimi Lisp verir. Tüm program kodu olarak yazılır s-ifadeler veya parantez listeleri. Bir işlev çağrısı veya sözdizimsel formu fonksiyonu ya da ilk operatör adı, aşağıdaki bağımsız değişken içeren bir liste olarak yazılır; Örneğin, bir işlev füç argüman alır denilen olacaktır . (f arg1 arg2 arg3)

John McCarthy o iken 1958 yılında Lisp’i geliştirilen Massachusetts Teknoloji Enstitüsü’nde (MIT). McCarthy onun bir yazıda tasarımı yayınlanan ACM Communications başlıklı 1960 yılında, “Sembolik İfadelerin Rekürsif Fonksiyonlar ve Makine, Bölüm I tarafından Onların Computation”. O birkaç basit operatörler ve fonksiyonlar için bir gösterimi ile, biri inşa edebilirsiniz gösterdi Turing tamamlama algoritmalar için dil.

Bilgi İşleme Dili 1955 veya 1956, ilk AI dil oldu ve zaten Lisp’te kullanılmak üzere geldi böyle liste işleme ve özyineleme gibi kavramları, birçok dahil.

McCarthy’nin orijinal notasyonu parantez “kullanılan M-ifadeleri tercüme olacaktır” S-ifadeleri . Bir örnek olarak, M-sentezleme car[cons[A,B]]S ifade eşdeğerdir . Lisp hayata geçirildi sonra, programcılar hızla S-ifadeleri kullanmayı tercih ettiniz, ve M-ifadeler terk edildi. M-ifadelerin kısa ömürlü girişimi ile tekrar ortaya MLisp tarafından Horace Enea ve CGOL tarafından Vaughan Pratt . (car (cons A B))

Lisp ilk tarafından uygulanan Steve Russell , bir de IBM 704 bilgisayarda. Russell McCarthy’nin gazeteyi okuyup Lisp ki (McCarthy’nin sürpriz) gerçekleşen eval işlevi de uygulanabileceğini makine koduna . Sonuç Lisp programları çalıştırmak veya daha doğrusu “Lisp ifadeleri değerlendirmek” için kullanılabilecek bir çalışma Lisp tercüman oldu.

İki montaj dil makrolar için IBM 704 : listelerini ayrıştırılması için ilkel operasyonlar oldu car( Kayıt Adresi kısmının İçeriği sayısı) ve cdr( Kayıt ait Azaltma kısmının İçeriği dönem “kayıt” “bellek anlamında kullanılır sayısı), kayıt bellek konumu ‘”, günümüzde sözde’. Lisp lehçeleri halen kullanmakta carve cdr( / k ɑːr / ve / k ʊ d ər / ) sırasıyla bir listedeki ilk öğeyi ve listenin geri kalanını iade işlemleri için.

Lisp ile yazılmış ilk tam Lisp derleyici, MIT’de Tim Hart ve Mike Levin tarafından 1962 yılında hayata geçirildi. Bu derleyici derlenmiş ve yorumlanır fonksiyonları serbestçe intermix hangi artan derleme Lisp modelini tanıttı. Hart ve Levin’in not kullanılan dil McCarthy’nin önceki kodundan Modern Lisp tarzı çok daha yakın olduğunu.

Lisp 1970’lerin derleyici teknikleri ve stok donanımıyla uygulamak zor bir sistemdi. Çöp toplama MIT mezunu öğrenci tarafından geliştirilen rutinleri, Daniel Edwards , bu pratik genel amaçlı bilgi işlem sistemleri üzerinde Lisp çalıştırmak için yapılmış, ancak verimlilik hala bir sorun oldu. Bu yaratılmasına yol açtı Lisp makineleri Lisp ortamları ve programları çalıştırmak için adanmış donanım:.

1980 ve 1990’larda, büyük bir çaba yeni Lisp lehçelerinde (çoğunlukla halefleri üzerinde çalışmaya birleştirmek için yapıldı Maclisp gibi ZetaLisp Tek bir dile ve NIL (Lisp Yeni Uygulama). Yeni dil, Common Lisp , biraz uyumlu idi yerini aldığı ağızlarıyla (kitap Common Lisp Dil . 1994 yılında çeşitli yapılarla uyumluluğunu notları) ANSI Common Lisp standardı, “ANSI X3.226-1994 Bilgi Teknolojisi Programlama Dili Common Lisp” yayınladı.

LISP 1 – Birinci uygulanması.
1.5 LISP – Birinci yaygın MIT’de McCarthy ve diğerleri tarafından geliştirilen, dağıttı. Özgün “LISP 1” tercüman üzerinde çeşitli iyileştirmeler içeriyordu, ancak planlandığı gibi büyük bir yeniden yapılandırma değildi çünkü Yani adında 2 LISP olurdu.
Stanford LISP 1.6 – Bu geliştirilen 1.5 LISP devamı olduğu Stanford AI Lab , ve yaygın olarak dağıtıldı PDP-10 çalışan sistemlerde BAŞLıKLARıNıZıN-10 işletim sistemini. Bu Maclisp ve InterLisp olarak modası geçmiş oldu.
MACLISP – MIT’nin için geliştirilen proje MAC (Apple hiçbir ilişkisi Macintosh ne de karşı, McCarthy ), LISP 1.5 doğrudan soyundan. Bu PDP-10 ve üzerinde koştu Multics sistemleri. (MACLISP sonradan Maclisp çağrılacak gelirdi ve genellikle MacLisp olarak adlandırılır.)
Interlisp – geliştirilen BBN Technologies çalışan PDP-10 sistemleri için Tenex işletim sistemi, daha sonra sıra Xerox Lisp makineleri için bir “Batı kıyısı” Lisp olarak kabul edilen InterLisp-D . “InterLISP 65” adı verilen küçük bir versiyonu yayımlandı 6502 tabanlı Atari 8-bit ailesi bilgisayar hattı. Oldukça uzun bir süre için, Maclisp ve InterLisp güçlü rakipleri vardı.
Franz Lisp – aslında bir Kaliforniya Berkeley Üniversitesi projesi; Daha sonra adı adı “bir mizahi deformasyon olan Franz Inc. tarafından geliştirilen Franz Liszt ” ve ifade etmez Allegro Common Lisp , daha son yıllarda Franz Inc. tarafından satılan Ortak Lisp lehçesi.
XLISP , AutoLISP dayanıyordu.
Standart Lisp ve Taşınabilir Standart Lisp yaygın AZALTMAK özellikle Bilgisayar Cebir Sistemi ile, kullanılan ve taşıdık bulundu.
ZetaLisp kullanılan – Ayrıca Lisp Makine Lisp’i adlandırılan Lisp makineleri , Maclisp doğrudan soyundan. ZetaLisp Common Lisp üzerinde büyük bir etkisi vardı.
LeLisp bir Fransız Lisp dilidir. İlklerinden biri Arayüz Üreticileri (SOS Arayüz denir) LeLisp yazılmış.
Şema (1975).
Common Lisp (1984), tarafından tarif edildiği gibi ortak lisp dili – birkaç farklı denemeden (ZetaLisp, bir birleştirme baharat Lisp , NIL , ve S-1 Lisp de Şema dilden Maclisp halefi ağızlarını oluşturmak için), asli etkilerle . Common Lisp bu sürümü geniş kapsamlı platformlar için kullanılabilir ve bir çokları tarafından kabul edildi fiili standart ANSI Common Lisp (ANSI X3.226-1994) yayınlanmasına dek. Common Lisp en yaygın alt lehçelerin arasında şunlar Çelik Bankası Common Lisp (SBCL), CMU Common Lisp (CMU-CL), Clozure OpenMCL (! Clojure ile karıştırılmamalıdır), GNU CLISP ve Franz Lisp sonraki sürümleri; hepsi (aşağıya bakınız), daha sonra ANSI CL standardına bağlı kalırlar.
Dylan ilk versiyonunda Common Lisp Object Sistemi ile Planı karışımı oldu.
EuLisp – Yeni bir verimli ve temizlenmiş Lisp’i geliştirmek için girişimde.
ISLISP – Yeni bir verimli ve temizlenmiş Lisp’i geliştirmek için girişimde. ISO / IEC 13816 olarak standardize: 1997 ve daha sonra ISO / IEC 13816 olarak revize: 2007: Bilgi teknolojisi – Programlama dili ISLISP – dilleri, kendi ortamları ve sistem yazılım arayüzleri Programlama .
IEEE Şema – IEEE standardı, 1178-1990 (R1995)
ANSI Common Lisp – Bir Amerikan Ulusal Standartlar Enstitüsü (ANSI) standart alt komite tarafından oluşturulan Common Lisp için, X3J13 başlamak kiralanan, Common Lisp: Dil bir taban belgesi olarak ve bir kamu aracılığıyla çalışmak üzere fikir birliği ortak sorunlara çözüm bulmak için süreç taşınabilirlik programların ve uyumluluk Common Lisp uygulamaların. Resmen rağmen bir ANSI standardı, uygulama, satış, kullanım ve ANSI Common Lisp etkisi olmuştur ve dünya çapında görülebilir devam ediyor.
ACL2 veya “Uygulamalı Common Lisp için Hesaplamalı mantık” Ortak LISP’in bir uygulamalı (yan etkisi serbest) modeli. ACL2 bilgisayar sistemlerini modelleyebilirsiniz bir programlama dili ve bu modellerin özelliklerini kanıtlayan yardımcı olacak bir araçtır hem de.
Clojure , derler Lisp son lehçesi Java sanal makine ve üzerinde belirli bir odak vardır eşzamanlılık .
Montaj Lisp Odaklı Oyun (veya GOAL) Andy Gavin ve geliştirdiği bir video oyunu programlama dilidir Jak ve Daxter ekibi Yaramaz Köpek . Bu Allegro Common Lisp ile yazılı ve oyunların tüm Jak ve Daxter serisinin geliştirilmesinde kullanıldı.
2000, mevcut için
1990’larda bir ölçüde düşmüştür sonra, Lisp ilgi bir canlanma yaşadı geçenlerde etmiştir. En yeni etkinlik uygulamalarına etrafında odaklanmıştır Common Lisp , Şema , Emacs Lisp , Clojure ve Racket ve yeni taşınabilir kütüphane ve uygulama geliştirilmesini kapsamaktadır.

Birçok yeni Lisp programcı gibi yazarlar tarafından ilham edildi Paul Graham ve Eric S. Raymond antika kabul edilen dil diğerlerini takip etmek. Yeni Lisp programcılar genellikle gözlerini açan bir deneyim olarak dili tanımlamak ve diğer dillerde önemli ölçüde daha fazla üretken olduğunu iddia eder. Farkındalık bu artış “tezat olabilir AI kış ” ve 1990’ların ortasında Lisp’in kısa kazancı.

Dan Weinreb Common Lisp uygulamaları onbir aktif tutulan Common Lisp uygulamaları yaptığı ankette listeler. Scieneer Common Lisp 2002 yılında ilk sürümü ile CMUCL gelen çatallı yeni bir ticari uygulamasıdır.

Açık kaynak topluluğu yeni destekleyen altyapıyı oluşturdu: CLiki Common Lisp ile ilgili bilgileri toplar bir wiki olup Common Lisp dizin listeleri kaynakları, #lisp popüler bir IRC kanalıdır ve desteği ile (paylaşımı ve kod parçacıklarını yorumlama verir lisppaste , bir IRC bot Lisp’te yazılmış), Gezegen Lisp üzerine, çeşitli Lisp ile ilgili bloglar içeriğini toplayan LispForum kullanıcıları Lisp konular ele, Lispjobs iş teklifi duyuran bir hizmettir ve bir haftalık haber servisi vardır Haftalık Lisp haber . Common-lisp.net açık kaynak Common Lisp projeler için bir barındırma sitesidir. Quicklisp Common Lisp için bir kütüphane yöneticisidir.

Lisp Elli yıl (1958-2008) OOPSLA @ LISP50 kutlandı. Boston, Vancouver ve Hamburg’da düzenli yerel kullanıcı toplantılar vardır. Diğer olaylar Avrupa Ortak Lisp Toplantısı, Avrupa Lisp Sempozyumu ve Uluslararası Lisp Konferansı sayılabilir.

Şema topluluğu aktif tutar yirmi uygulamaları üzerinde . Çeşitli önemli yeni uygulamalar (Tavuk, Gambit, Gauche Ikarus, Hırsızlık, Ypsilon) son yıllarda geliştirilmiştir. Revize 5 Scheme Algoritmik Dil Programı standardına Raporu yaygın Şema toplumda kabul edildi. Uygulama için Şema İstekleri süreci Programı için yarı standart kütüphaneler ve uzantıları bir sürü yarattı. Bireysel Şeması uygulamalarının Kullanıcı toplulukların büyümesine devam ediyor. Yeni bir dil standardizasyon süreci 2003 yılında başlamış ve R neden oldu 6 bilgisayar bilimini öğretmek için Şema 2007. Akademik kullanımında RS Şema standardı düşmüş gibi görünüyor. Böyle MIT gibi bazı üniversiteler, kendi bilgisayar bilimleri giriş derslerinde Planı yapan artık.

: Lisp’te birkaç yeni lehçeleri vardır Arc , Hy , Nu , Liskell ve LFE (Lisp Aromalı Erlang). İçin ayrıştırıcı Julia Femtolisp, bir lehçesi uygulanan Planı (Julia Planı esinlenmiştir ve genellikle bir Lisp’i kabul edilir).

Common Lisp ve Scheme Lisp gelişme iki önemli akarsuları temsil eder. Bu diller ölçüde farklı tasarım seçeneği somutlaştırmak.

Ortak Lisp daha başarılı olduğunu Maclisp . De etki vardı Lisp makinesi Lisp’i , Maclisp, NIL , S-1 Lisp’i , baharat Lisp’i ve Düzeni. Bu Lisp Makine Lisp (programlamak için kullanılan büyük bir Lisp lehçesi özelliklerin çoğuna sahip Lisp Makineleri ), ancak herhangi bir kişisel bilgisayar ya da iş istasyonu üzerinde verimli uygulanabilir olacak şekilde tasarlanmıştır. Ortak Lisp bir genel amaçlı programlama dilidir ve bu nedenle birçok yerleşik veri türleri, işlevler, makro ve diğer dil elemanları ve bir nesne sistemine (dahil geniş bir dil standardı vardır Common Lisp Object System ). Common Lisp de gibi Planı, belirli özelliklerin ödünç sözcük kapsama alınması ve sözcük kapanışları . Common Lisp uygulamaları gibi farklı platformlar hedeflemede kullanılabileceği LLVM , Java sanal makine , x86-64, PowerPC, Alpha, ARM, Motorola 68000 ve MIPS ve Windows, MacOS, Linux, Solaris, FreeBSD gibi işletim sistemleri NetBSD, OpenBSD, Dragonfly BSD ve Heroku.

Şema tarafından icat Lisp programlama dilinin bir statik kapsamlı ve düzgün kuyruk özyinelemeli lehçesi olan Guy L. Steele, Jr. ve Gerald Jay Sussman . Son derece açık ve basit anlam ve ifadeleri oluşturmak için birkaç farklı yol vardır için tasarlanmıştır. Common Lisp daha erken yaklaşık on yıl tasarlanan Şema daha minimalist bir tasarım. Bu standart özelliklerin ancak (gibi belirli uygulama özellikleri ile çok daha küçük bir kümesi vardır kuyruk çağrı optimizasyonu ve tam devamından Common Lisp belirtilmeyen). Zorunluluk, fonksiyonel ve mesaj geçen stiller dahil programlama paradigmaların, çok çeşitli, Şemada elverişli ifadesini bulur. Şema standartlarının bir dizi (Revize ile gelişmeye devam ediyor n Algoritmik Dil Planı Raporu) ve bir dizi Uygulanması İçin Şema Talepleri .

Clojure esas hedef Lisp son lehçesi olan Java sanal makinesi ve ortak dil çalışma zamanı (CLR), Python VM, Yakut VM YARV ve derleme JavaScript . Pragmatik genel amaçlı dil olarak tasarlanmıştır. Clojure gelen önemli etkileri çizer Haskell ve değişmezlik üzerinde çok güçlü bir önem vermektedir. Clojure opsiyonel tip tavsiyeleri ve Java çerçeveler ve kütüphanelere erişim sağlar tür kesmesi o yansımayı önlemek ve hızlı ilkel işlemlerini etkinleştirebilirsiniz Java çağrıları yüzden.

Ayrıca, Lisp lehçeleri olarak kullanılan betik dilleri en tanınmış olmak üzere birçok uygulamada Emacs Lisp içinde Emacs editörü, AutoLISP ve sonraki Görsel Lisp içinde AutoCAD , Nyquist içinde Audacity içinde Şema LilyPond . Yararlı bir Şeması tercüman potansiyel küçük boyutlu gömülü betik için özellikle popüler hale getirir. Örnekleri arasında SIOD ve TinyScheme başarılı bir şekilde gömülü olan, her ikisi de GIMP genel adı “Komut-Fu” altında görüntü işlemcisi. LIBREP, aslen dayalı John Harper tarafından bir Lisp tercüman Emacs Lisp dilinde gömülü olduğu Sawfish pencere yöneticisi .

Dil yenilikler
Lisp programı kodunun yapısı çok daha sonra standart bir veri yapısını-bir kalitede sadakatle ve doğrudan temsil “adlı ilk dildi homoiconicity “. Bu nedenle, Lisp fonksiyonlar, manipüle değiştirilmiş ya da hatta daha düşük düzeyli kontroller olmaksızın bir Lisp programı içinde oluşturulabilir. Bu genel olarak ifade gücü bakımından dilin başlıca avantajlarından biri olarak kabul ve sözdizimsel makrolar ve uygun bir dil yapar metacircular değerlendirilmesi .

Bir kullanan bir koşullu If-Then-başka sözdizimini Fortran bağlamda McCarthy tarafından icat edilmiştir. O içerisine dahil önerdi ALGOL , ancak bir parçası haline değildi Algol 58 şartname. Lisp için, McCarthy daha genel kullanılan koşul -Yapı. Algol 60 aldı if-then-else ve onu popüler hale getirdiler.

Lisp derinden etkilemiştir Alan Kay , geliştirilen araştırma ekibinin lideri Smalltalk de Xerox PARC ; ve sırayla Lisp 1970’li yıllarda sonradan nesne yönelimli programlama özellikleri benimseyerek lehçelerinde (miras sınıfları, enkapsüle durumlarda, mesaj geçen vs.), Smalltalk etkilendi. Aromalar nesne sistemi kavramını ortaya çoklu miras ve mixin . Common Lisp Object Sistemi birden devralma ile multimethods sağlar çoklu sevk ve birinci sınıf jenerik fonksiyonları , esnek ve güçlü formunu veren dinamik sevk . O (dahil birçok müteakip Lisp için şablon olarak hizmet vermiştir Planı genellikle aracılığıyla uygulanmaktadır nesne sistemleri,) metaobject protokolü , bir yansıtıcı metacircular tasarım nesnesi sistemi kendisi açısından tanımlanır edildiği: Lisp Smalltalk sonra yalnızca ikinci diliydi böyle bir metaobject sistemine sahip olabilmesi (ve hala çok az dillerinden biridir). Yıllar sonra, Alan Kay bu özelliklerin izdiham sonucu, sadece Smalltalk ve Lisp düzgün gebe nesne yönelimli programlama sistemleri olarak kabul edilebileceğini öne sürdü.

Lisp kavramını ortaya otomatik çöp toplama sistemi yürüdüğü, yığın kullanılmayan bellek için arayan. Böyle kuşak çöp toplama gibi modern sofistike çöp toplama algoritmaları İlerleme Lisp’te kullanımı uyarılmıştır.

Edsger Dijkstra onun 1972 yılında Turing Ödülü ders belirterek,

“Kuruluşundan birkaç çok temel ilkeler ile, [LISP] kayda değer bir istikrar göstermiştir. Bunun yanı sıra, LISP bir anlamda bizim en gelişmiş bilgisayar uygulamaları dikkate değer sayıda taşıyıcı olmuştur. LISP şaka olarak tanımlanmıştır“ bir bilgisayar kötüye en akılcı yoludur”. o kurtuluş tam lezzet iletir çünkü o anlatının büyük iltifat düşünüyorum. daha önce imkansız düşüncelerle bizim en yetenekli hemcinslerinin bir dizi yardımcı olmuştur”
Büyük ölçüde çünkü (erken mikroişlemci dahil) erken hesaplama donanım açısından kendi kaynak gereksinimleri, Lisp itibariyle popüler dışında olmadı AI olarak topluma Fortran ve ALGOL -descended C dili. Çünkü karmaşık ve dinamik uygulamalara uygunluğu arasında, Lisp 2010’lu yıllarda popüler ilgi bazı canlanma keyif alıyor.

Söz dizimi ve semantik
Not : Bu makalenin örnekleri yazılır Common Lisp (çoğunda da geçerlidir olsa Planı ).
Sembol olarak (S-ifadeler)
Lisp bir olduğunu ifade yönelimli dil . En diğer diller farklı olarak, hiçbir ayrım “ifadeleri” ve arasında yapılır “ifadeleri” ; tüm kod ve veri ifadeler olarak yazılır. Bir ifade edildiğinde değerlendirildi , daha sonra diğer ifadeler içine gömülü olabilir, (Common Lisp’te, muhtemelen birden çok değer olarak) bir değer üretir. Her bir değer, herhangi bir veri türü olabilir.

McCarthy’nin 1958 kağıt sözdizimi iki tür kişiye: Sembolik ifadeleri ( S-ifadeleri kodu ve verileri bir iç sunumunu ayna, sexps); ve Meta ifadeler ( M-ifadeler S ifadelerin işlevlerini ifade). M-ifadeler iyilik bulmadım ve hemen hemen tüm Lisps bugün kullanımı S-ifadeleri kod ve verileri hem manipüle etmek.

Parantez kullanımı diğer programlama dili ailelerden Lisp’in en derhal bariz farktır. Sonuç olarak, öğrencilerin uzun gibi Lisp takma verdik Aptal parantez içindeki Kayıp veya tahriş Gereksiz parantez sürü . Ancak, S-ifadesi sözdizimi da Lisp’in gücünün çok sorumludur: sözdizimi, son derece düzenlidir bilgisayar tarafından manipülasyon kolaylaştırır. Ancak, Lisp sözdizimi geleneksel parantezler gösterimde sınırlı değildir. Alternatif gösterimler içerecek şekilde uzatılabilir. Örneğin, XMLisp kullanan bir Common Lisp uzantısıdır metaobject protokolü Genişletilebilir İşaretleme Dili (S-ifadeleri entegre XML ).

İfadeleriyle ilgili güven dili büyük esneklik sağlar. Lisp Çünkü fonksiyonlar listeleri gibi yazılır, bunlar tam verileri gibi işlenebilir. Bu diğer programları (manipüle programların kolay yazma sağlar metaprogramming ). Birçok Lisp lehçeleri neredeyse sınırı olmadan dilin uzantısını sağlayan makro sistemler kullanılarak bu özelliği, istismar.

Listeler
Bir Lisp listesi ile ayrılmış unsurları ile yazılır boşluk ve parantez içine. Örneğin, bunun elemanları üç olan bir listedir atomuna , ve . Bu değerler örtülü yazıldığında: bunlar sırasıyla iki tamsayılar ve bir “simge” olarak adlandırılan bir Lisp özgü veri türü vardır, ve bu şekilde beyan edilmesi gerekmez. (1 2 foo) 12foo

Boş listesi ()aynı zamanda özel atomu olarak temsil edilir nil. Bu atomu ve bir liste her ikisi olduğu Lisp’te tek varlıktır.

İfadeler kullanarak listeleri gibi yazılır önek gösterimi . Listedeki ilk eleman bir fonksiyonun adı, bir makro bir lambda ifade veya “özel bir operatör” (aşağıya bakınız) adı adıdır. Listenin kalan bağımsız değişkendir. Örneğin, işlev listolarak liste olarak bağımsız değişken, yani ifade döndürür

(list 1 2 (quote foo))
Listeye değerlendirir . Önce “alıntı” Yukarıdaki örnekte bunu değerlendirerek vermeden argüman döndüren bir “özel operatör” dir. Parça ifade değerlendirilmeden önce herhangi bir işlem görmeyen ifadeler yinelemeli değerlendirilir. Örneğin, (1 2 foo)foo

(list 1 2 (list 3 4))
Listeye değerlendirir . Üçüncü bağımsız değişken listesi olduğuna dikkat edin; listeleri iç içe olabilir. (1 2 (3 4))

Operatörler
Aritmetik işlemler benzer şekilde muamele edilir. İfade

(+ 1 2 3 4)
altında 10 olarak değerlendirilen eşdeğer infix gösterimde “olur .” 1 + 2 + 3 + 4

Lisp Algol kökenli dillerde uygulandığı şekliyle operatörlerin bir bağı yoktur. Lisp’te Aritmetik operatörleri değişkin fonksiyonları (ya da n-li bağımsız değişken herhangi bir sayıda almak mümkün). C-tarzı ‘++’ artım operatörü bazen adı altında uygulanmaktadır incf sözdizimi vererek

(incf x)
eşdeğer (setq x (+ x 1)) , yeni bir değer iade x .

“Özel operatörleri” (bazen “özel formlar”) Lisp’in kontrol yapısını sağlamaktadır. Örneğin, özel operatör ifüç argüman alır. İlk bağımsız değişken olmayan sıfır ise, ikinci bağımsız olarak ele alınacaktır aksi takdirde, üçüncü bağımsız olarak değerlendirilir. Böylece, ekspresyonu

(if nil
(list 1 2 “foo”)
(list 3 4 “bar”))
değerlendirir . Önemsiz olmayan bir ifade yerine ikame olsaydı Tabii ki bu daha faydalı olacaktır . (3 4 “bar”)nil

Lisp aynı zamanda mantıksal operatörlerine ve , ya da ve değildir . Ve ve ve operatörler yapmak kısa devre değerlendirme sırasıyla ilk nil olmayan nil argüman döndürür.

(or (and “zero” nil “never”) “James” ‘task ‘time)
“James” sonucunu verir.

Lambda ifadeleri ve fonksiyon tanımı
Başka bir özel operatör lambda, daha sonra bir ifade içinde değerlendirilir değerlere değişkenleri bağlamak için kullanılır. Bağımsız değişkenler için: Bu operatör aynı zamanda fonksiyonlarını oluşturmak için kullanılan lambdabir bağımsız değişken bir listesi vardır, ve işlev değerlendirir (döndürülen değeri değerlendirilir son ifadenin değeridir) olduğu ifade veya ifadeler. İfade

(lambda (arg) (+ arg 1))
, uygulandığında, bir argüman alır için bağlanan bir fonksiyonu olarak değerlendirilir argve bu değişken sayıca bir fazla döner. Lambda ifadeleri adlı fonksiyonlar hiçbir farklı olarak ele alınır; Aynı şekilde çağrılır. Bu nedenle, sentezleme

((lambda (arg) (+ arg 1)) 5)
değerlendirir 6. Burada, bir işlev uygulaması yapıyoruz: biz buna değer 5 ileterek anonim işlevini yürütün.

Adlandırılan fonksiyonları kullanarak bir sembol içinde lambda ifadesi depolayarak tarafından oluşturulur defun makro.

(defun foo (a b c d) (+ a b c d))
(defun f (a) b…)adlı yeni bir işlev tanımlar fküresel ortamda. Bu ifadeye kavramsal benzer:

(setf (fdefinition ‘f) #'(lambda (a) (block f b…)))
Atomlar
Orijinal olarak LISP’den iki temel vardı veri türleri atomuna ve listeler. Bir liste, her eleman bir atom veya bir liste ya da elementler, sonlu bir sıralı sekans, ve bir atom olduğu sayı veya sembolü. Bir sembol aslında bir olarak yazılan eşsiz bir adlandırılmış öğe oldu alfanümerik içinde dize kaynak kodu ve değişken adı olarak veya bir veri öğesi olarak kullanılabilen sembolik işleme . Örneğin, liste sembolü: üç unsuru içerir , listesini ve 2 numaralı. (FOO (BAR 1) 2)FOO(BAR 1)

atomu ve listeler arasındaki temel fark atomuna değişmez ve benzersiz idi. kaynak kodu farklı yerlerde ortaya ancak her liste bağımsız bir şekilde, diğer listeler değiştirilmiş olabilir ve karşılaştırma operatörleri tarafından diğer listeler ayırt edilebilir ayrı bir nesne iken, aynı nesne temsil aynı şekilde yazılmıştır iki atomu içerir.

Daha fazla veri tipleri sonra Lisp lehçelerinde konulmakta ve şöyle programlama stilleri , bir atom kaybetti önem kavramını gelişti. Bir çok ağızlar hala yüklem muhafaza atomu için eski uyumluluk bir dezavantajları olmayan herhangi bir nesne için doğru tanımlanması.

Etiketler
Daha Fazla Göster

İlgili Makaleler

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Göz Atın

Kapalı
Başa dön tuşu
Kapalı
Kapalı

Reklam Engelleyici Algılandı

Lütfen reklam engelleyiciyi devre dışı bırakarak bizi desteklemeyi düşünün