Perché Haskell ha un built-in if/then/else
, che dipende dal Bool
tipo, 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 built-in if/then/else
, che dipende dal Bool
tipo, invece di avere una semplice funzione di libreria? Ad esempio
if :: Bool -> a -> a -> a
if True x _ = x
if False _ y = y
Risposte:
E 'puramente per la bella di zucchero del if
, then
e else
le parole chiave; infatti, GHC (con l' RebindableSyntax
estensione abilitata) eliminerà la sintassi semplicemente chiamando qualunque ifThenElse
funzione sia nell'ambito.
Non importa molto ... per me sembra che / allora / altrimenti non sia usato molto spesso al giorno d'oggi. Mi ritrovo a scrivere guardie di schemi instad di if .. then .. else.
Da un punto di vista sintattico, però, è bello averlo
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 mi sembra un po 'troppo LISPish.
Per l'analisi semantica e la generazione di codice, è bello avere questo costrutto, che può essere facilmente compilato in un 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 tutti i parametri (non valutati) devono essere passati. Ma costa anche tempo (e memoria, che devono essere recuperati in seguito) per creare il thunk. Per ovviare a questo, si dovrebbe incorporare la funzione if ovunque.