14

複数のブール式をテストする推奨される方法は何ですか?

私はこれを使用しています:

case () of () | test1 -> value1
              | test2 -> value2
              | otherwise -> value3

これがスタイルいいの?もっときれいな方法はありますか?

4

3 に答える 3

23

このパターンは、たとえばControl.Conditionalcondからの関数でシミュレートできます。

signum x = cond [(x > 0     ,  1)
                ,(x < 0     , -1)
                ,(otherwise ,  0)]

特別綺麗とは言えませんが。


次の GHCでは、マルチウェイを使用できるようになります。万歳! (さっき見つけた)

f t x = if | l <- length t, l > 2, l < 5 -> "length is 3 or 4" 
           | Just y <- lookup x t        -> y 
           | False                       -> "impossible" 
           | null t                      -> "empty" 
于 2012-07-23T21:27:26.603 に答える
7

Haskell には一致しない場合の適切な構文がないため、これは私がよく目にするイディオムです。私の意図をより明確にするために、私は通常、意図的に次のように一致させundefinedます。

case undefined of
  _ | foo       -> bar
    | baz       -> quux
    | otherwise -> chunkyBacon
于 2012-07-23T21:29:09.460 に答える
2

タプル内の一連の式でパターンマッチを行うこともできます

case (test1,test2) of
  (True,_) -> value1
  (_,True) -> value2
  _        -> value3
于 2012-07-24T08:16:09.887 に答える