Haskell'in neden basit bir kütüphane işlevi yerine türüne if/then/else
bağlı bir yerleşik Bool
özelliği vardır? Gibi
if :: Bool -> a -> a -> a
if True x _ = x
if False _ y = y
Haskell'in neden basit bir kütüphane işlevi yerine türüne if/then/else
bağlı bir yerleşik Bool
özelliği vardır? Gibi
if :: Bool -> a -> a -> a
if True x _ = x
if False _ y = y
Yanıtlar:
Bu güzel şeker için tamamı if
, then
ve else
anahtar kelimeler; Aslında, GHC ( RebindableSyntax
uzantısı etkinleştirilmiş), ifThenElse
kapsamı ne olursa olsun işlevini çağırarak sözdizimini kaldırır .
Çok önemli değil ... benim için / o zaman / başka günlerde çok sık kullanılmamış gibi görünüyor. Kendimi örüntü gardiyanlarının izinde ... ... öyküsünde olduğunu biliyorum.
Bununla birlikte, sözdizimsel bir bakış açısına sahip olmak güzel
if expr1 then expr2 else expr3
Yani yazabilirsin
if foo a then bar b else baz c
yerine
if (foo a) (bar b) (baz c)
Bu da bana biraz LISPish görünüyor.
Anlamsal analiz ve kod oluşturma için, verimli makine koduna kolayca derlenebilecek bu yapıya sahip olmak güzeldir. Kodun, (değerlenmemiş) parametrelerin hepsinin geçirilmesi gereken bir işlev çağrısına karşılık olarak ulaşılmayan dal için serseri yapan kısmı atlayabileceğini unutmayın. Ama aynı zamanda thunk oluşturmak için zaman (ve daha sonra yeniden kazanılması gereken hafıza) mal olur. Bunu iyi yapmak için her yerde if işlevini satırlamak gerekir.