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来使这个看起来好一点,但我觉得必须有一个更好的方法,但似乎无法想出任何搜索谷歌的东西.
提前致谢!
你可以失去警卫并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)