2013-03-21 9 views
5

Przypadkowo usunąłem mój wpis, ale ponawiam to pytanie w celu wyjaśnienia.Potwierdzanie leniwego oceniania

Jeśli mam funkcję:
const x = 1

Jeśli pytam Haskell:
const (1/0)

on powróci 1 ponieważ ocena leniwy faktycznie nie obliczają 1/0 jest, prawda? To nie musi.

+2

Tak, to jest nie ścisłe gwarancje semantyczne Haskella. –

+10

Należy zauważyć, że '1/0' nie rzuca wyjątku - po prostu zwraca specjalną wartość" Double ". Ale jeśli zmienisz go na coś, co powoduje wyjątek (np. "Błąd", ""), nadal otrzymujesz odpowiedź "1". – MathematicalOrchid

+2

Oczywiście, 'const' jest złą nazwą - można nazwać to" const1 ", a w rzeczywistości można go zdefiniować jako" const1 = const 1 ". Nazwa 'const', podobnie jak większość funkcji Prelude, nie powinna być używana do niczego innego. – leftaroundabout

Odpowiedz

8

Tak, zgadza się. const, jak to zdefiniowałeś, zawsze wytworzy 1, gdy jest oceniany - bez względu na to, jaki jest argument. A ponieważ argument nie jest istotny dla wyniku, nie jest oceniany. W związku z tym nie wystąpi żaden błąd ani niepowodzenie, które mogłoby zostać spowodowane przez ocenę argumentu.

Powiązane problemy