Son zamanlarda beni rahatsız eden hızlı bir soru. Haskell, tüm eşdeğerlik testini, bir false değeri döndürse bile, bir boole döndüren bir işlevde mi çalışır? Haskell'de kısa devre (&&)
f a b = ((a+b) == 2) && ((a*b) == 2)
ilk test yanlış dönerse Örneğin
için, bu &&
sonra ikinci bir test gerçekleştireceğiz? Yoksa Haskell bunu yapmamak ve harekete geçmek için yeterince tembel mi?
Bu, liste kavraması durumunda da aynı mıdır? –
'Kısa devre 'doğru şekilde konuşulmuyor. Değerlerin değerlendirilip değerlendirilmediğini bilemezsiniz, çünkü bunu yan etkileri olmadan kanıtlamak için bir yolunuz yoktur, ancak ihtiyaç duyulmadıkça, bunların mümkün olmayacaktır. – Dario
Sanırım C++ ile aynı: Dil sağ tarafın değerlendirilmediğini söylüyor. Ancak, eğer derleyici herhangi bir yan etki olmadığını söylerse, bunu zaten değerlendirebilir - ve bazı C++ derleyicileri şartlı dallar pahalı olduğu için bunu yapar. –