działa Haskell mają operatora warunkowego, który występuje jakoCzy haskell ma operator warunkowy, taki jak "x == y? A: b" w C++ lub ifelse (x == y, a, b) w R?
x == y ? a : b
C++ lub
ifelse(x==y, a, b)
w R?
działa Haskell mają operatora warunkowego, który występuje jakoCzy haskell ma operator warunkowy, taki jak "x == y? A: b" w C++ lub ifelse (x == y, a, b) w R?
x == y ? a : b
C++ lub
ifelse(x==y, a, b)
w R?
Haskella if
wykonuje dokładnie tak, jak chcesz.
if x == y then a else b
Jak wspomniano Lee, istnieje bool
funkcja w Data.Bool
że robi to samo. Również dzięki lazyness Haskell, w bool someLongComputation something True
nie działa długiej obliczeń ..
Istnieje funkcja bool
w Data.Bool
:
import Data.Bool
bool b a (x == y)
czy istnieje powód, aby użyć tego w stosunku do "jeśli jeszcze inaczej" poza zwięzłością? czy w przypadku narożnych przypadków występuje różnica w wydajności lub różnica w wydajności? – daj
@daj Na podstawie [jego definicji] (http://hackage.haskell.org/package/base-4.8.0.0/docs/src/Data-Bool.html#bool), 'bool' nie powinien być związany z wszelkie wygórowane koszty ogólne. – Jubobs
@daj: Jedynym powodem użycia 'bool' byłoby przekazanie niedostatecznie wypełnionego formularza do funkcji wyższego rzędu, np.' Map (bool b a) xs'. –
Oprócz if
lub Data.Bool.bool
, które rzeczywiście tylko to, co chcesz, może również zdefiniować takiego operatora w Haskell!
infixr 1 ?
(?) :: Bool -> a -> a -> a
(True ? a) _ = a
(False ? _) b = b
GHCi> 3 == 2? "equal" $ "nonequal"
"nonequal"
GHCi> 3 == 3? "równy" $ "nonequal"
"równy"
Oczywiście, ale zauważ, że 'if'-' then' -elel' jest wbudowanym konstruktorem języka, a nie operatorem. Na przykład nie ma sensu pytać o typ "jeśli". – Jubobs
Tak, ale ... funkcje zdefiniowane przez użytkownika ... 'ifelse p a b = jeśli p to a else b'. Lub tupling jak w R 'ifelse (p, a, b) = jeśli p to a else b'. –
@Jubobs '?:' W C++ to również wbudowana konstrukcja języka. – sepp2k