2015-04-24 20 views

cevap

16

Haskell'in if tam istediğiniz gibi performans gösterir.

if x == y then a else b 

Lee belirtildiği gibi

, aynı şeyi yapar Data.Bool bir bool işlevi yoktur. Ayrıca Haskell'ın lazyness sayesinde bool someLongComputation something True uzun hesaplama çalışmaz ..

+0

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

+0

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'. –

+2

@Jubobs '?:' C++ da dilin yerleşik bir yapısıdır. – sepp2k

10

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) 
+0

, 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

+0

@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

+7

@daj: 'bool' işlevini kullanmanın tek nedeni, uygulanmayan formu "harita (bool b a) xs" gibi bir üst sırasına geçirmektir. –

15

, 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"

+1

'?', C? (t, e) = eğer c ise o zaman e '. – augustss

+3

'$' ve kötüye kullanımın kötüye kullanılması. – chi

İlgili konular