haskell CHaskell, C++ içinde "x == y? A: b" gibi bir koşullu işleve veya R? De ifelse (x == y, a, b) var mı?
x == y ? a : b
++ veya R
ifelse(x==y, a, b)
olarak gerçekleştiren bir koşullu operatör var mı?
haskell CHaskell, C++ içinde "x == y? A: b" gibi bir koşullu işleve veya R? De ifelse (x == y, a, b) var mı?
x == y ? a : b
++ veya R
ifelse(x==y, a, b)
olarak gerçekleştiren bir koşullu operatör var mı?
Haskell'in if
tam istediğiniz gibi performans gösterir.
if x == y then a else b
Lee belirtildiği gibi
, aynı şeyi yaparData.Bool
bir
bool
işlevi yoktur. Ayrıca Haskell'ın lazyness sayesinde
bool someLongComputation something True
uzun hesaplama çalışmaz ..
Data.Bool
yılında bool
işlevi yoktur: İstediğiniz sadece ne Aslında çıkıyor if
veya Data.Bool.bool
, Apart
import Data.Bool
bool b a (x == y)
, bunun tersi olmanın yanı sıra, "eğer öyleyse" vs kullanmanın bir sebebi var mı? Köşe durumlarda herhangi bir performans farkı veya farkı var mı? – daj
@daj [Tanımına] (http://hackage.haskell.org/package/base-4.8.0.0/docs/src/Data-Bool.html#bool) dayanarak, bool'un ilişkili olmaması gerekir. herhangi bir engelleyici yük. – Jubobs
@daj: 'bool' işlevini kullanmanın tek nedeni, uygulanmayan formu "harita (bool b a) xs" gibi bir üst sırasına geçirmektir. –
, seni Haskell'de böyle bir operatörü de tanımlayabilirsiniz!
infixr 1 ?
(?) :: Bool -> a -> a -> a
(True ? a) _ = a
(False ? _) b = b
GHCi> 3 == 2? "eşit" $ "nonequal"
"nonequal"
GHCi> 3 == 3? "eşit" $ "nonequal"
"eşit"
Elbette, ancak 'if '-'then'-'else', bir işlevin değil, dilin yerleşik bir yapısı olduğunu unutmayın. Örneğin, 'if' türünü sormak mantıklı değildir. – Jubobs
Evet, ama ... kullanıcı tanımlı işlevler ... 'ifelse p a b = eğer p sonra başka bir b' ise. Veya R 'ifelse'de olduğu gibi tupling (p, a, b) = p ise başka bir şey ise b'. –
@Jubobs '?:' C++ da dilin yerleşik bir yapısıdır. – sepp2k