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.