Per la terza volta nella mia vita sto cercando di imparare Haskell, questa volta tramite Learn you a Haskell....
Quando l'autore spiega guardie, egli mostra questo esempio:In che senso le guardie sono meglio che imperative se? (nuovo ad haskell)
bmiTell :: (RealFloat a) => a -> String
bmiTell bmi
| bmi <= 18.5 = "You're underweight, you emo, you!"
| bmi <= 25.0 = "You're supposedly normal. Pffft, I bet you're ugly!"
| bmi <= 30.0 = "You're fat! Lose some weight, fatty!"
| otherwise = "You're a whale, congratulations!"
e dice
Questo ricorda molto un grande, se altro albero in linguaggi imperativi, solo che questa è di gran lunga migliore e più leggibile . Mentre grandi se gli altri alberi sono solitamente disapprovati, a volte un problema è definito in modo così discreto che non è possibile aggirarli. Le guardie sono un'alternativa molto carina per questo.
posso vedere le guardie sono più leggibili, ma io non capisco perché che la sintassi è "di gran lunga migliore"
E 'più flessibile? È più potente? Qual è il grande vantaggio delle guardie?
Il mio grande problema è probabilmente la frase
Mentre grande se gli alberi sono di solito altro disapprovate, a volte un problema è definito in modo così discreta che non si può andare in giro loro
Qualcuno può dare un esempio?
Oltre a essere guardie più leggibili, non aggiungere nulla. –
@ KarolisJuodelė: aggiungono qualcosa: le guardie del modello, che non possono essere eseguite con 'if'' then' 'else' - né con' case' 'of', ma solo con una combinazione di entrambi. – leftaroundabout