SORU
23 Mayıs 2009, CUMARTESİ


Neden Bunun/F fonksiyonlar# özyinelemeli varsayılan olarak?

Neden F O fonksiyonları * ve Bunun (ve diğer diller) varsayılan özyinelemeli değil mi?

Diğer bir deyişle, neden dil tasarımcıları açıkça yazdığınız için iyi bir fikir olduğuna karar verip bir deklarasyon rec:

let rec foo ... = ...

ve işlev özyinelemeli varsayılan olarak değerlendiriyor? Neden rec açık bir ihtiyaç oluşturmak?

CEVAP
24 Mayıs 2009, Pazar


rec açık kullanmak için önemli bir sebep staticly fonksiyonel programlama dil (değişik ve çeşitli şekillerde genişletilmiş de olsa) yazılan altında yatan Hindley-Milner tür kesmesi ile yapmak.

Eğer bir tanım varsa let f x = x, 6 ** tür olması ve farklı noktalarda 'a farklı türleri için uygulanabilir olmasını beklersin. Ama aynı şekilde, eğer yazarsan let g x = (x 1) ..., x g vücudun geri kalanına int olarak ele alınması gerektiğini düşünüyoruz.

Bu ayrım ile Hindley-Milner kesmesi ilgilenir yolu açıkgenellemeadım. Bazı noktaları zaman işlem programı, türü sistem durur ve der ki "Tamam, bu tür bu tanımları olacak genelleştirilmiş bu noktada, bu yüzden ne zaman biri kullanır, herhangi bir serbest değişken türü kendi türü olacaktazeörneği, ve böylece bu tanım, herhangi bir diğer kullanımlar engel olmaz."

Bu genelleme yapmak mantıklı yer fonksiyonlarının karşılıklı olarak özyinelemeli bir dizi kontrol ettikten sonra olduğu ortaya çıktı. Önceki ve türleri aslında çarpışır ... ne çok fazla, durumlara önde gelen genelleme. Daha sonraki, ve çok az, birden çok türü örneklemesi ile kullanılabilir mi bu tanımlar genelleme yapma.

Yazın denetleyicisi hangi tanımları ayarlar birbirini tekrar eder bilmesi gereken göz önüne alındığında, ne yapabilirim? Bir ihtimal sadece bir kapsamda tüm tanımları bir bağımlılık analizi yapmak, ve mümkün olan en küçük gruplar halinde yeniden düzenlemek için. Yan etkileri sınırsız olan Haskell, aslında bunu yapar, ama F gibi dillerde# (ve) Bunun ve ESM, bu yan etkileri çok sipariş olabilir, çünkü kötü bir fikir. Bunun yerine genelleme oluşur ve burada kullanıcı karşılıklı olarak özyinelemeli ve uzatma böylece hangi açıkça işaretlemek için sorar.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Alan Fullmer

    Alan Fullmer

    3 EYLÜL 2010
  • Khan Academy

    Khan Academy

    17 Kasım 2006
  • Tech4Geeks

    Tech4Geeks

    8 Ocak 2012