SORU
17 HAZİRAN 2012, Pazar


Nasıl Haskell istisnalar çalışır?

GHCi

Prelude> error (error "")
*** Exception: 
Prelude> (error . error) ""
*** Exception: *** Exception: 

Neden bir iç içe geçmiş bir durum değil mi?

CEVAP
17 HAZİRAN 2012, Pazar


Cevap bu (biraz) şaşırtıcı semantiğikesin olmayan durumlar

Saf kod değerlendirmek gösterilebilirayarlayınolağanüstü değerler (error undefined değeri, yani açıkçadeğilistisnalar tür generated in IO), sonra da dilini bu set herhangi bir değer verir. Haskell, olağanüstü değerleri kod yerine kontrol-akış zorunlu dil merkezli özel durumlar kayan NaN gibi.

Hatta gelişmiş Haskellers için arada bir yakaladım bir durum gibi

 case x of
   1 -> error "One"
   _ -> error "Not one"

Kodu özel bir set olarak değerlendirildiğinden, DZD bir seçim için ücretsiz. İyileştirmeleri, bu her zaman sonucunu görebilirsiniz "Değil".

Neden bunu yapıyoruz? Aksi takdirde aşırı dil değerlendirme sırası sınırlamak istiyoruz çünkü, örneğin belirli bir sonucu tamir:

 f (error "a") (error "b")

örneğin tarafından değerlendirilecek gerektiren hata değeri varsa sağdan sola. Çok-Haskelly BM!

Beri istemiyoruz sakat iyileştirmeler yapılabilir bizim kod sadece destek error çözüm için belirttiğiniz sonucu olmayan bir deterministik seçim kümesinin üstün değerler: kesin olmayan giremez! Bir şekilde, tüm özel durumları döndü, biri seçilir.

Normalde, bu durumda error hata ayıklama kullanarak son derece kafa karıştırıcı durum, içinde dize önemsediğin sürece umurunda değil - bir istisna bir durum.


Referanslar: A semantics for imprecise exceptions, Simon Peyton Jones, Alastair Reid, Tony Hoare, Simon Marlow, Fergus Henderson. Proc Programlama Dilleri Tasarım ve Uygulama (PLDİ'99), Atlanta. (PDF)

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • BiGSH0TROB

    BiGSH0TROB

    7 NİSAN 2011
  • TechRax

    TechRax

    21 EYLÜL 2009
  • xiaoyu85

    xiaoyu85

    20 ŞUBAT 2010