2013-11-20 1 views
-2

Я никогда не использовал эти два ключевых слова во всем, что я запрограммировал, потому что я действительно не понимаю их или когда они должны использоваться, если они могут быть использованы вместе и т.д.Может кто-нибудь объяснить мне или связать меня с хорошим руководством, которое объясняет, пусть и где в Haskell

+0

Я рекомендую отчет Haskell 2010. – Ingo

+4

@James http://stackoverflow.com/questions/4362328/haskell-where-vs-let –

ответ

2

Иногда у вас есть код, как:

foo x y = if min (abs x) (abs y) > 0 then negate (min (abs x) (abs y)) else min (abs x) (abs y) 

С let или where, вы можете ввести сокращения для общих выражений, что делает ваш код более читаемым:

foo x y = if z > 0 then negate z else z 
    where 
     z = min (abs x) (abs y) 

что эквивалентно:

foo x y = let 
     z = min (abs x) (abs y) 
    in if z > 0 then negate z else z 

A LET-выражения только что: выражение и может появляться в любом месте выражение может появиться, в то время как пункт where является необязательной заключительной частью корпуса альтернативного или шаблона связывания ,

+2

Есть тонкие отличия. Ссылка [This] (http://www.haskell.org/haskellwiki/Let_vs._Where) хорошо объясняет это как последний пример, когда небольшое изменение в определении функции может привести к большой разнице в производительности. – bheklilr