2012-07-23 7 views

risposta

23

Questo modello può essere simulati con una funzione - per esempio, cond da Control.Conditional:

signum x = cond [(x > 0  , 1) 
       ,(x < 0  , -1) 
       ,(otherwise , 0)] 

non posso chiamarlo particolarmente bello, però.


Nel prossimo GH abbiamo will be able to use multi-way if, evviva! (Appena trovato fuori)

f t x = if | l <- length t, l > 2, l < 5 -> "length is 3 or 4" 
      | Just y <- lookup x t  -> y 
      | False      -> "impossible" 
      | null t      -> "empty" 
+0

grande notizia su 'if'! – amindfv

7

Questo è un idioma che vedo abbastanza spesso dal Haskell manca di una sintassi corretta per un caso senza corrispondenza. Per rendere più chiara le mie intenzioni, io di solito intenzionalmente corrispondono undefined:

case undefined of 
    _ | foo  -> bar 
    | baz  -> quux 
    | otherwise -> chunkyBacon 
2

È anche possibile pattern matching sulla serie di espressioni all'interno di una tupla

case (test1,test2) of 
    (True,_) -> value1 
    (_,True) -> value2 
    _  -> value3 
+0

Sì, sapevo che l'idioma di Erlang e la sua limitazione di espressioni di guardia :) Ma diventa davvero brutto quando il numero di guardie aumenta ... – b0fh

Problemi correlati