Cebirsel Verilerle Kısıtlamaya Dayalı Tip Çıkarımları


11

Ben ML şecere ifade tabanlı bir dil üzerinde çalışıyorum, bu yüzden doğal olarak tür çıkarım gerekiyor :)

Şimdi, EOPL'de (Friedman ve Wand) basit bir uygulamaya dayanan, çıkarım türleri sorununa kısıtlamaya dayalı bir çözüm geliştirmeye çalışıyorum, ancak zarif bir şekilde yan basamak cebirsel veri tipleri.

Şimdiye kadar olanlarım sorunsuz çalışıyor; bir ekspresyon durumunda eolduğu a + b, e : Int, a : Intve b : Int. eBir eşleşme varsa ,

match n with
  | 0 -> 1
  | n' -> n' * fac(n - 1)`, 

Ben haklı olduğunu çıkarabiliriz t(e) = t(the whole match expression), t(n) = t(0) = t(n'), t(match) = t(1) = t(n' * fac(n - 1)vb ...

Ama cebirsel veri türleri söz konusu olduğunda çok emin değilim. Filtre gibi bir işlev olduğunu varsayalım:

let filter pred list =
  match list with
    | Empty -> Empty
    | Cons(e, ls') when pred e -> Cons (e, filter ls')
    | Cons(_, ls') -> filter 

Liste türünün polimorfik kalması için Eksilerin tür olması gerekir a * a list -> a list. Yani, bu kısıtlamalar yaratmada, ben açıkçası benim cebirsel kurucular bu tür bakmak gerekir - Şimdi sahip sorun cebirsel inşaatçı çoklu kullanımlarının 'bağlam duyarlılığı' - nasıl benim kısıt denklemlerde ifade emin aiçinde her vaka aynı olmalı?

Buna genel bir çözüm bulmakta zorlanıyorum ve bununla ilgili çok fazla literatür bulamıyorum. Ne zaman benzer bir şey bulduğumda - kısıtlamaya dayalı tür çıkarımlı ifade tabanlı dil - cebirsel veri türleri ve polimorfizmden sadece kısa dururlar.

Herhangi bir girdi çok takdir edilmektedir!


@Allah nankör ses çıkarmak istemiyorum, ama hazır bir çözüm arıyorum - herhangi bir öneriniz var mı? Bulabildiğim çoğu doküman (ML, OCaml ... üzerindeki INRIA belgeleri gibi) ihtiyacım olandan çok daha kapsamlıdır (ve anlayabiliyorum).
Kris

ATTAPL'deki çıkarım bölümü ile başlayacağım , sanırım ihtiyacınız olan her şeyi erişilebilir bir seviyede tartışıyorlar.
Gilles 'SO- kötü olmayı kes'

@Gilles Sanırım ATTAPL kitaplığımda olmayan tek 'klasik' PL kitap: P Ama teşekkürler, Pazartesi günü bir göz atacağım, belki ofislere dağıtılmış 10 kopya ile Uni'de bir yere oturuyorum: )
Kris

@Kris bu sorunla başa çıkmak için erişilebilir bir kaynak buldunuz mu? Benim bir "mini ML" benim uygulama tam olarak bu sorun üzerinde sıkışmış ... Ben ATTAPL ilgili bölümü ( pauillac.inria.fr/~fpottier/publis/emlti-final.pdf ) buldum ve cebirsel bölümü yağsız düşünüyorum veri türleri, ama korkarım biraz kafamın üzerinde.
michiakig

@spacemanaki Evet, o zamandan beri pdfs.semanticscholar.org/8983/… tam olarak bunun için mükemmel bir kaynak buldum .
Kris

Yanıtlar:


2

Bakınız: Mini ML Özellikle Tür Çıkarma bölümü.

Basit bir işlevsel dilin tam ayrıştırıcısı için F # 'daki örnek kodu içerir. Daha da önemlisi, Tip Çıkarma bölümü, çoğu tür çıkarsama sisteminde bulunan Hindley-Milner algoritmasını uygular. Yazar ayrıca Hindley-Milner'ın anlaşılmasına yardımcı olmak için diğer iki önemli belgeye de bağlantı sağlamaktadır; biri bir tür üst düzey giriş, diğeri ise algoritmanın kodda uygulanmasını açıklayan bir çalışmadır.


Tek bağlantılar genellikle bir cevap değildir. Lütfen orada neyin bulunabileceğini ve neden yardımcı olduğunu açıklayın.
Raphael
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.