SORU
4 EKİM 2012, PERŞEMBE


Skolems nelerdir?

Eeek! GHCi Şifremi Skolems bulunamadı!

...
Couldn't match type `k0' with `b'
  because type variable `b' would escape its scope
This (rigid, skolem) type variable is bound by
  the type signature for
    groupBy :: Ord b => (a -> b) -> Set a -> Set (b, [a])
The following variables have types that mention k0
...

Onlar nelerdir? Onlar benim program ne istiyorsun? Ve neden kaçmak (nankör namussuzlar) mi çalışıyorlar?

CEVAP
4 EKİM 2012, PERŞEMBE


Başlamak için, bir "sert" bir bağlamda tipi değişken a tipi değişken böylece diğer türü değişkenleri ile birleştirilmiş olamaz bu bağlam dışında konarak, bağlı anlamına gelir.

Bu çalışmaları büyük bir anlaşma gibi değişkenlere bağlı bir lambda: Belirli bir lambda (\x -> ... ), "dışarıda" uygulamak için ne değeri gibi, elbette; ama içi, yapamazsın sadece karar verdiğiniz değeri x olmalı bazı belirli değer. Lambda içinde x için bir değer seçmek çok saçma ses gerekir, ama bu konuda "vesaire, sert tipi değişken filan maç olamaz" demek. falan filan nedir

Hatta forall açık nicelik kullanmadan, üst düzey herhangi bir tür imza forall her tip örtülü bir değişken söz ettiğini unutmayın.

Tabii ki, bu aldığın hata değil. "Ne kaçtı tipi değişken bile daha aptalca bir lambda (\x -> ...) sahip x belirli değerleri kullanmaya çalışıyor gibi." demek bir ^em>dışarıdalamda, bir tartışma için uygulamadan bağımsız olarak. Hayır, bir şey için lambda uygulama ve sonuç değeri kullanarak ... yani aslında kullanarak değildeğişken kendisitanımlanan kapsamı dışında.

Sebebi bu olabilir türleri (görünüşteki olmadan, görünüşe göre saçma olarak örnek bir lambda) olduğu için, iki kavram "tip değişken" etrafta: birleşme Sırasında, "değişken" temsil eden belirlenmemiş türleri, tespit edilmesi ile diğer değişkenler üzerinden yazın çıkarım. Öte yandan, özellikle Olası türleri üzerinde değişen olarak tanımlanır sayısal değişkenler yukarıda anlatmıştık.

Lambda ifade türü (\x -> x) düşünün. Başlatılmasını tamamen belirsiz tip a, görüyoruz bunu bir argüman alır ve dar olduğu için a -> b, o zaman görürüz herhalde geri bir şey aynı tür olarak bağımsız, yani biz dar ilerletmek için a -> a. Ama şimdi isteyebilirsiniz 13* *herhangi bir türü için çalışır, biz bir nicelik belirteci (forall a. a -> a) ver.

Yani, kaçtı türü bir değişken türü DZD varır belirsiz bir tip ile birleştirilmiş olmalıdır konarak bağlı oluşurdışarıdabu nicelik belirteci kapsamında.


Görünüşe göre aslında açıklamak unuttum terim "skolem tipi değişken" burada, heh. Yorumlarda da belirtildiği gibi, bizim durumumuzda "rijit tip değişken", yani yukarıda hala fikrini açıklar. aslında eş anlamlı.

Terim nerden tam olarak emin değilim ama Skolem normal form temsil içerir tahmin ediyorumvaroluşsalevrensel açısından, hem akut DZD yapılır. Bir skolem (veya Sert) tipi değişken biri bu, içinde bazı kapsam, bilinmeyen-ama-belirli bir türü için bir sebep olmanın da bir parçası olan bir polimorfik tür, gelen bir varoluşsal veri türü, &c.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • andony5589

    andony5589

    7 Aralık 2011
  • EvilControllers

    EvilControll

    20 Ocak 2008
  • Influencer Plus

    Influencer P

    2 Ocak 2013