Nasıl Lisp dili yeniden yapalım mı? | Netgez.com
SORU
21 ÅžUBAT 2010, Pazar


Nasıl Lisp dili yeniden yapalım mı?

Lisp dili kendini yeniden tanımlamak sağlar ve bunu araştırmaya çalıştım olduğunu duymuştum, ama hiç bir yerde net bir açıklama yok. Herkes bunu basit bir örnek var mı?

CEVAP
22 ŞUBAT 2010, PAZARTESİ


Lisp kullanıcıları olarak Lisp bakınprogramlanabilir programlama dili. İçin kullanılırsembolik hesaplama- semboller ile bilgisayar.

Makrolar, sembolik hesaplama paradigması yararlanabilmesi için tek bir yolu vardır. Daha geniş bir vizyon Lisp sembolik ifadeleri tanımlamak için kolay yol sağlar: matematiksel kavram, mantık ifadeleri, döngü yapıları, kural, kısıtlama açıklamalar ve daha fazlası. Makrolar (Lisp kaynak dönüşümleri formları) sadece sembolik hesaplama bir uygulama.

Eğer 'yeniden tanımlama' dil, sonra yeniden tanımlamak kesinlikle varolan bazı dil mekanizması (sözdizimi, anlambilim, çözümler) yeniden tanımlamak anlamına gelecektir. sana soracak Olursa bu bazı yönleri vardır: Ama aynı zamanda dil özellikleri uzantısı, gömme, çıkarma yoktur.

Lisp geleneğinde bu özellikleri sağlamak için birçok girişimler oldu. Lisp lehçesi ve belirli bir uygulama onları yalnızca bir kısmını sunabilir.

Birkaç yolu değiştir/yeniden/ana Ortak Lisp uygulamaları tarafından sağlanan işlevselliğini genişletmek için:

  • s-ifade sözdizimi. S-ifadeleri sözdizimi sabit deÄŸildir. Okuyucu (fonksiyon OKUNUR) olarak adlandırılan kullanırtablo okumabir karakter okunduÄŸunda yürütülen fonksiyonları belirtmek için. DeÄŸiÅŸtirmek ve tablolar oluÅŸturmak okuyabilir. Bu örnek için listeler, simgeler ya da diÄŸer veri nesneleri sözdizimi deÄŸiÅŸtirmenizi saÄŸlar. Ayrıca yeni veya mevcut veri türleri (karma tabloları gibi) için yeni bir sözdizimi tanıtmak olabilir. Aynı zamanda s-ifade sözdizimi tamamen deÄŸiÅŸtirmek ve farklı bir ayrıştırma mekanizması kullanın. EÄŸer yeni çözümleyici Lisp formları dönerse, deÄŸiÅŸim Yorumlayıcı veya Derleyici için ihtiyaç yok. Tipik bir örnek telkin ifadeleri okuyabilirsiniz okumak bir makro. Okumak gibi bir makro içinde, operatörler için telkin ifadeler ve öncelik kuralları kullanılmaktadır. Makrolar makrolar sıradan farklıdır okuyun: Lisp veri sözdizimi karakter düzeyinde okuma makro çalışma.

  • iÅŸlevleri yerine. Üst düzey fonksiyonlar semboller baÄŸlıdır. Kullanıcı bu baÄŸlama deÄŸiÅŸtirebilir. ÇoÄŸu uygulamaları birçok yerleÅŸik iÅŸlevleri için bile izin vermek için bir mekanizma var. EÄŸer yerleÅŸik fonksiyon ODASI için bir alternatif saÄŸlamak istiyorsanız, tanımı yerine. Bazı uygulamalar, bir hata yükseltmek ve deÄŸiÅŸikliÄŸi ile devam etmek için bu seçeneÄŸi sunuyoruz. Bazen bir paketi kilidini açmak için gereklidir. Bu genel olarak fonksiyonlarını tanımlar deÄŸiÅŸtirilebilir anlamına gelir. Bu da bir sınırı var. Derleyici, kodu satır içi iÅŸlevleri olabilir. Bir etki görmek için daha sonra deÄŸiÅŸtirilen kod kullanan kod yeniden derlemek gerekir.

  • fonksiyonlar danışmanlık. Genellikle fonksiyonlar için bazı davranış eklemek için bir tane istiyor. Bu 'danışmanlık' Lisp dünyasında denir. Birçok Common Lisp uygulamaları böyle bir imkan saÄŸlayacaktır.

  • özel paketler. Paket adı boÅŸluk semboller grubu. COMMON-LİSP paketi ANSI Common Lisp standardı parçası olan tüm simgeleri ev sahipliÄŸi yapmaktadır. Programcı yeni paketler oluÅŸturmak ve varolan sembolleri içe aktarabilirsiniz. Programlarınızı daha fazla ya da farklı imkanlar saÄŸlayan GENİŞLETİLMİŞ-COMMON-LİSP paketi kullanabilirsiniz. Sadece ekleyerek (PAKETİ "GENİŞLETİLMİŞ-COMMON-LİSP") geliÅŸtirmek için Common Lisp kendi geniÅŸletilmiÅŸ sürümü kullanmaya baÅŸlayabilirsiniz. Kullanılan ad baÄŸlı olarak, kullandığınız Lisp lehçesi slighty hatta radikal olarak farklı görünebilir. Yanında birkaç Lisp lehçeleri tarafında bu ÅŸekilde var Lisp Makinede Cins: ZetaLisp, CLtL1, Common Lisp ve Symbolics ANSI Common Lisp.

  • CLOSve dinamik nesneler. Common Lisp Object Sistemini deÄŸiÅŸtirmek yerleÅŸik ile birlikte geliyor. Meta-Nesne Protokolü bu yeteneklerini geniÅŸletir. GeniÅŸletilmiÅŸ olabilir CLOS/CLOS içinde yeniden tanımlandı. Farklı miras istiyorum. Bir yöntem yazmak. Farklı ÅŸekillerde örneklerini saklamak istediÄŸiniz. Bir yöntem yazmak. Yuvaları daha fazla bilgi sahibi olması. Bunun için bir sınıf saÄŸlar. Kendisi bir bütün olarak uygulamak mümkün 'bölge' nesne yönelimli bir programlama dili. farklı olacak ÅŸekilde tasarlanmıştır CLOS Tipik örnekler, yabancı nesne sistemleri (Objective C) ile prototipler, entegrasyon gibi ÅŸeyler, sebat ilavesi,...

  • Lisp oluÅŸturur. Lisp formları yorumu makroları ile tanımlanabilir. Bir makro kapsadığı kaynak kodu ayrıştırmak ve onu deÄŸiÅŸtirebilir. Dönüşüm sürecini kontrol etmek için çeÅŸitli yollar vardır. Karmaşık makrolar formlar Lisp sözdizimi anlar ve dönüşümler geçerli olan bir kod walker, kullanın. Makrolar önemsiz olabilir, ama aynı zamanda DÖNGÜ YİNELEME veya makrolar gibi çok karmaşık bir hale gelebilir. DiÄŸer tipik örnekler gömülü SQL ve gömülü HTML üretimi için makrolar. Makrolar da hesaplama derleme taşımak için kullanılan olabilir. Derleyici kendisi Lisp bir program olduÄŸu için, rastgele hesaplama derleme sırasında yapılabilir. ÖrneÄŸin Lisp makro eÄŸer belirli parametreleri derleme sırasında bilinen bir formül iyileÅŸtirilmiÅŸ bir sürümünü hesaplamak olabilir.

  • Semboller. Common Lisp sembol makrolar saÄŸlar. Sembol makrolar kaynak kodu sembollerin anlamını deÄŸiÅŸtirmek için izin verir. Tipik bir örnek: (- yuva (foo) bar ( foo 17)) Burada sembolü FOO kaynak ile kapalı-SLOT deÄŸiÅŸtirilecek bir ara (yuva-deÄŸeri bar 'foo).

  • en iyi duruma getirmesözde ile derleyici makrolar bazı iÅŸlevler daha verimli sürümleri bulunur. Derleyici bu derleyici makrolar kullanacaktır. Bu programı en iyi duruma getirme için kullanıcı için etkili bir yoldur.

  • Durum İşleme- belirli bir programlama dili kullanarak elde koÅŸullarıyla baÅŸa çıkabilir. Common Lisp hataları iÅŸlemek için geliÅŸmiÅŸ bir yöntem saÄŸlar. Durum Sistem aynı zamanda dil özellikleri tanımlamak için kullanılır. ÖrneÄŸin bir yazılı kendi kendine otomatik yüklenmesini bir mekanizma ile tanımlanmamış iÅŸlev hataları ele verebilir. Tanımlanmamış bir fonksiyon Lisp tarafından görüldüğü zaman hata ayıklayıcı iniÅŸ yerine, hata iÅŸleyicisi iÅŸlevi otomatik yüklenmesini ve gerekli kodu yükledikten sonra iÅŸlemi yeniden deneyin.

  • Özel deÄŸiÅŸkenmevcut koda deÄŸiÅŸken baÄŸlar enjekte. Birçok lehçeleri Lisp, Common Lisp gibi, özel/dinamik deÄŸiÅŸkenler bulunur. Onların deÄŸerini yığında zamanı baktı. Bu kapsayan bir kod deÄŸiÅŸtirmeden varolan kodu etkileyen deÄŸiÅŸken baÄŸlantıları eklemenizi saÄŸlar. Tipik bir örnek *standart çıkış* gibi bir deÄŸiÅŸkendir. Bir deÄŸiÅŸkeni yeniden baÄŸlayın ve tüm çıkış yeni bir baÄŸlama dinamik kapsamı boyunca bu deÄŸiÅŸkeni kullanarak yeni bir yöne gidecek. Richard Stallman bu varsayılan Emacs Lisp yapılmış onun için çok önemli olduÄŸunu Stallman Düzeni sözlü baÄŸlayıcı ve Common Lisp haberi bile) savundu.

Lisp farklı diller ve programlama paradigmalar bir sürü uygulamak için kullanılmıştır, çünkü bu ve daha fazla imkanları var. Tipik bir örnek, mantık dil gömülü bir uygulama, diyelim ki, Prolog. Lisp s-ifadeleri ile Giriş koşulları tanımlamak için izin verir ve özel bir derleyici ile Giriş şartlarını kodu Lisp için derlenmiş olabilir. Bazen her zamanki Prolog sözdizimi gerekli değildir, o zaman bir ayrıştırıcı sonra derlenecek olan Lisp formlar, içine normal Giriş şartları ayrıştıracaktır. Gömülü diller için diğer örnekler Kural tabanlı bir dil, matematiksel ifadeler, terimler SQL, Lisp çevirici içi, HTML, XML ve daha birçok vardır.

Bunu PaylaÅŸ:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Electro Posé

    Electro PosÃ

    21 ÅžUBAT 2013
  • Triune Films

    Triune Films

    9 ÅžUBAT 2006
  • WePlayWeWatch

    WePlayWeWatc

    3 Temmuz 2013