2013-03-21 21 views
5

Ho cancellato accidentalmente il mio post, ma sto ripubblicando questa domanda per chiarimenti.Conferma della valutazione lazy

Se ho una funzione:
const x = 1

Se chiedo Haskell:
const (1/0)

Si tornerà 1 perché la valutazione pigra in realtà non calcolare quanto 1/0 è, giusto? Non è necessario.

+2

Sì, questo è ciò che le garanzie semantiche non severe di Haskell. –

+10

Si noti che '1/0' non lancia in realtà un'eccezione - restituisce semplicemente un valore' Double' speciale. Ma se lo si cambia in qualcosa che "fa" un'eccezione (ad es., "Errore" muore "'), si ottiene ancora '1' come risposta. – MathematicalOrchid

+2

Ovviamente, 'const' è un brutto nome per questo - potresti chiamarlo' const1', e potrebbe infatti essere definito come 'const1 = const 1'. Il nome 'const', come la maggior parte delle funzioni di Preludio, non dovrebbe essere usato per nient'altro. – leftaroundabout

risposta

8

Sì, è vero. const, come lo hai definito, produrrà sempre 1 quando viene valutato, indipendentemente dall'argomento. E poiché l'argomento non è rilevante per il risultato, non viene valutato. Pertanto, non si verificheranno errori o non terminazioni che potrebbero essere causati dalla valutazione dell'argomento.