23

たまにこういうコードを書く

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

そして、次のように、不要な「頭脳」関数なしでこのことを書きたいという衝動に駆られるたびに:

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

どのコードがはるかに「Haskelish」です。これを行う方法はありますか?

4

2 に答える 2

53

はい、where句を使用して:

solveLogic a b
        | a >= x     = 1
        | a == b     = 333
        | otherwise  = 5
    where
      x = 1
于 2012-04-29T07:06:02.347 に答える
16

ガードを表現したいときは、このやや醜いハックを使います

case () of
_ | a >= x     -> 1
  | a == b     -> 333
  | otherwise  -> 5
于 2012-04-29T11:04:55.853 に答える