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

  • Andrew_Huang

    Andrew_Huang

    10 ŞUBAT 2006
  • trickycharms

    trickycharms

    6 Aralık 2013
  • UKF

    UKF

    2 Aralık 2009