2012-04-29 20 views
12

Czasami piszę funkcję kodu jak tenKorzystanie strażników w let .. w wyrażeniach

solveLogic :: Int -> Int -> Int 
solveLogic a b = 
    let 
     x = 1 
     brainiac 
      | a >= x  = 1 
      | a == b  = 333 
      | otherwise = 5 
    in 
     brainiac 

i za każdym razem mam zachęcam do napisania tej rzeczy bez niepotrzebnych „Brainiac”, tak:

solveLogic :: Int -> Int -> Int 
solveLogic a b = 
    let 
     x = 1 
    in 
     | a >= x  = 1 
     | a == b  = 333 
     | otherwise = 5 

Który kod jest znacznie bardziej "Haskelowy". Czy jest jakiś sposób na zrobienie tego?

+4

'brainiac' nie jest funkcją, po prostu mówię. –

Odpowiedz

39

Tak, używając where klauzuli:

solveLogic a b 
     | a >= x  = 1 
     | a == b  = 333 
     | otherwise = 5 
    where 
     x = 1 
10

Gdy chcę strażników jako wyraz używam tego nieco brzydki Hack

case() of 
_ | a >= x  -> 1 
    | a == b  -> 333 
    | otherwise -> 5 
+0

Musi to być '->' zamiast '=' dla osłony instrukcji case. Wszystkie oprócz pierwszego "_" można pominąć. – leftaroundabout

+0

Tak. Naprawiony. Za dużo wycinania i wklejania. – augustss

Powiązane problemy