Perché Haskell ha un if/then/else
incorporato, che dipende dal tipo Bool
, invece di avere una semplice funzione di libreria? Ad esempio
if :: Bool -> a -> a -> a
if True x _ = x
if False _ y = y
Perché Haskell ha un if/then/else
incorporato, che dipende dal tipo Bool
, invece di avere una semplice funzione di libreria? Ad esempio
if :: Bool -> a -> a -> a
if True x _ = x
if False _ y = y
È puramente per lo zucchero buono delle parole if
, then
e else
; infatti, GHC (con l'estensione RebindableSyntax
abilitata) desugar la sintassi semplicemente chiamando qualunque funzione ifThenElse
è in ambito.
Non importa molto ... per me sembra che se / then / else non venga usato molto spesso al giorno d'oggi. Mi trovo a scrivere pattern guards instad di if .. then .. else.
Da un punto di vista sintattico, tuttavia, è bello avere
if expr1 then expr2 else expr3
Quindi puoi scrivere
if foo a then bar b else baz c
invece di
if (foo a) (bar b) (baz c)
che sembra un po 'troppo LISPish per me.
Per l'analisi semantica e la generazione di codice, è bello avere questo costrutto, che può essere facilmente compilato con codice macchina efficiente. Si noti che il codice può saltare la parte che crea il thunk per il ramo che non viene raggiunto, al contrario di una chiamata di funzione, in cui devono passare tutti i parametri (non valutati). Ma costa anche tempo (e la memoria, che deve essere recuperata in seguito) per creare il thunk. Per ovviare a questo, si dovrebbe inline la funzione if ovunque.
Leggi altre domande sui tag haskell