Mogensen – Scott kodlaması - Mogensen–Scott encoding

İçinde bilgisayar Bilimi, Scott kodlama temsil etmenin bir yolu (özyinelemeli) veri türleri içinde lambda hesabı. Kilise kodlaması benzer bir işlevi yerine getirir. Veriler ve operatörler matematiksel bir yapı oluşturur; gömülü lambda hesabında.

Kilise kodlaması, temel veri türlerinin temsilleriyle başlar ve ondan oluşurken, Scott kodlaması oluşturma için en basit yöntemden başlar cebirsel veri türleri.

Mogensen – Scott kodlaması kodlamayı uygulayarak Scott kodlamasını genişletir ve biraz değiştirir Metaprogramlama. Bu kodlama, lambda hesabı veri olarak terimler, bir meta program tarafından çalıştırılacak.

Tarih

Scott kodlaması, yayınlanmamış ders notlarında ilk olarak Dana Scott[1]kitapta ilk atıfı geçen Kombinatoryal Mantık, Cilt II[2]. Michel Parigot mantıklı ve kuvvetli bir yorum verdi normalleştirme Scott kodlu sayılar için imleç,[3] sayıların "Yığın türü" gösterimi olarak adlandırılır.Torben Mogensen Daha sonra, Lambda terimlerinin veri olarak kodlanması için Scott kodlamasını genişletti.[4]

Tartışma

Lambda hesabı, verilerin parametreleri uygulama için gerekli tüm parametrelere henüz sahip olmayan bir işleve. Örneğin,

Alanların bulunduğu bir kayıt veya yapı olarak düşünülebilir. değerlerle başlatıldı . Bu değerlere daha sonra terim bir işleve uygulanarak erişilebilir f. Bu,

c gibi fonksiyonel dillerde bir cebirsel veri türü için bir kurucuyu temsil edebilir. Haskell. Şimdi varsayalım N kurucular, her biri argümanlar;

Her kurucu, işlev parametrelerinden farklı bir işlev seçer . Bu, yapıcıya bağlı olarak süreç akışında dallanma sağlar. Her kurucu farklı bir derece (parametre sayısı). Yapıcıların hiçbir parametresi yoksa, kurucular kümesi bir Sıralama; sabit sayıda değere sahip bir tür. Yapıcıların parametreleri varsa, özyinelemeli veri yapıları oluşturulabilir.

Tanım

İzin Vermek D ile bir veri türü olmak N inşaatçılar, , öyle ki yapıcı vardır derece .

Scott kodlama

Yapıcının Scott kodlaması veri türünün D dır-dir

Mogensen – Scott kodlaması

Mogensen, herhangi bir türlenmemiş lambda terimini veri olarak kodlamak için Scott kodlamasını genişletir. Bu, bir lambda teriminin bir Lambda hesabı içinde veri olarak temsil edilmesini sağlar. meta programı. Meta işlevi mse bir lambda terimini lambda teriminin karşılık gelen veri temsiline dönüştürür;

"Lambda terimi" bir etiketli sendika üç durumda:

  • Yapıcı a - bir değişken (derece 1, yinelemeli değil)
  • Yapıcı b - fonksiyon uygulaması (arity 2, her iki argümanda da özyinelemeli),
  • Yapıcı c - lambda-soyutlama (kaynak 1, özyinelemeli).

Örneğin,

Kilise kodlamasıyla karşılaştırma

Scott kodlaması, Kilise kodlaması boole için. Çiftlerin kilise kodlaması, kodlama yoluyla rastgele veri türlerine genelleştirilebilir nın-nin D yukarıda[kaynak belirtilmeli ]

bunu Mogensen Scott kodlamasıyla karşılaştırın,

Bu genellemeyle, Scott ve Church kodlamaları tüm numaralandırılmış veri türlerinde (boolean veri türü gibi) çakışır çünkü her kurucu bir sabittir (parametre yoktur).

Programlama için Church veya Scott kodlamasını kullanmanın pratikliği ile ilgili olarak, simetrik bir değiş tokuş vardır.[5]: Kilise kodlu sayılar, sabit zamanlı bir toplama işlemini destekler ve doğrusal zamanlı bir önceki işlemden daha iyisine sahip değildir; Scott kodlu sayılar, sabit zamanlı bir önceki işlemi destekler ve doğrusal zamanlı bir toplama işleminden daha iyisine sahip değildir.

Tip tanımları

Kilise tarafından kodlanmış veriler ve bunlarla ilgili işlemler yazılabilir sistem F, ancak Scott kodlu veriler ve işlemler F sisteminde açıkça yazılamaz. Evrensel ve özyinelemeli türler gerekli görünmektedir,[6].Gibi güçlü normalleşme kısıtlanmamış özyinelemeli türler için geçerli değildir[7], iyi tiplendirilmişliği belirleyerek Scott kodlu verileri manipüle eden programların sonlandırılması, tip sisteminin yinelemeli olarak yazılan terimlerin oluşumunda ek kısıtlamalar sağlamasını gerektirir.

Ayrıca bakınız

Notlar

  1. ^ Scott, Dana, Bir fonksiyonel soyutlama sistemi (1968). University of California, Berkeley'de verilen dersler (1962)
  2. ^ Curry, Haskell (1972). Kombinatoryal Mantık, Cilt II. Kuzey Hollanda Yayıncılık Şirketi. ISBN  0-7204-2208-6.
  3. ^ Parigot, Michel (1988). "İspatlarla programlama: ikinci dereceden bir tür teorisi". Avrupa Programlama Sempozyumu. Bilgisayar Bilimlerinde Ders Notları. 300: 145–159. doi:10.1007/3-540-19027-9_10. ISBN  978-3-540-19027-1.
  4. ^ Mogensen, Torben (1994). "Lambda Analizinde Verimli Kendi Kendine Yorumlama". Fonksiyonel Programlama Dergisi. 2 (3): 345–364. doi:10.1017 / S0956796800000423.
  5. ^ Parigot, Michel (1990). "Lambda analizinde verilerin gösterimi hakkında". Uluslararası Bilgisayar Bilimi Mantığı Çalıştayı. Bilgisayar Bilimlerinde Ders Notları. 440: 209–321. doi:10.1007/3-540-52753-2_47. ISBN  978-3-540-52753-4.
  6. ^ Nota bakın "Scott rakamlarının türleri" Martin Abadi, Luca Cardelli ve Gordon Plotkin (18 Şubat 1993).
  7. ^ Mendler, Nax (1987). "İkinci dereceden lambda hesaplamasında yinelemeli türler ve tür kısıtlamaları". Bilgisayar Bilimlerinde Mantık Sempozyumu (2): 30–36.

Referanslar