Haskell:检查所有条件是否都为真.如果他们返回true,否则为假

vis*_*i0n 3 haskell if-statement boolean multiple-conditions

我今天下午写了一些Haskell,我有一份必须满足的条件清单.如果它们都是真的我想要返回true,如果其中一个是假的,那么返回false.

我有一个方法正在工作,但我只是想知道是否有更好的方法来实现它的可读性/效率.

这是我有的:

checkMatch :: Person -> Person -> Bool
checkMatch seeker candidate
    |  gender candidate == preferedGender seeker 
    && gender seeker == preferedGender candidate
    && minAcceptableAge seeker <= age candidate 
    && maxAcceptableAge seeker >= age candidate
    && minAcceptableAge candidate <= age seeker
    && maxAcceptableAge candidate >= age seeker = True
    |  otherwise = False
Run Code Online (Sandbox Code Playgroud)

性别定义为:

data Gender = Male | Female (Eq)
Run Code Online (Sandbox Code Playgroud)

所以我只是调整了&&和s来使这个看起来好一点,但我觉得必须有一个更好的方法,但似乎无法想出任何搜索谷歌的东西.

提前致谢!

jto*_*bin 7

你可以失去警卫并and用来检查你的情况:

checkMatch :: Person -> Person -> Bool
checkMatch seeker candidate = and [ 
    gender candidate           == preferedGender seeker 
  , gender seeker              == preferedGender candidate
  , minAcceptableAge seeker    <= age candidate 
  , maxAcceptableAge seeker    >= age candidate
  , minAcceptableAge candidate <= age seeker
  , maxAcceptableAge candidate >= age seeker
  ]
Run Code Online (Sandbox Code Playgroud)

  • 你不需要`id`.使用`和:: [Bool] - > Bool`,它也在Prelude中. (2认同)
  • @ visi0n您可能也喜欢[`inRange`](http://hackage.haskell.org/packages/archive/base/latest/doc/html/Data-Ix.html#v:inRange). (2认同)