我正在编写一个函数,如果满足一些条件,我想返回True.例如,考虑这个比较两个字符串的函数:
test st1 st2
| st1 == st2
| "foo" `isInfixOf` st1 = True
| "baz" `isInfixOf` st2 = True
| otherwise = False
| otherwise = False
Run Code Online (Sandbox Code Playgroud)
显然,这个功能是不正确的.但是,我正在寻找一种测试几种条件的方法,我想知道:
A)最明智的方法是什么?B)是否有类似于我生成的使用警卫的方法?
为清楚起见,在我上面的简单示例中,输出test应该如下:
test "foobuz" "foobuz" = True
test "foobutter" "foobuz" = False
test "buz" "buz" = False
Run Code Online (Sandbox Code Playgroud)
NB链接条件可能是一个选项,但在经过两到三次测试后它变得非常难以理解:
test st1 st2 = st1 == st2 && "foo" `isInfixOf` s1 || "baz" `isInfixOf` s2
Run Code Online (Sandbox Code Playgroud)
我在想可能有办法使用Endo Monoid来测试几个条件链?
塞巴斯蒂安对当地助手的建议很好.但是,您给出的特定示例基本上归结为if CONDITION then True else False可以替换为CONDITION.所以你可以简单地写:
main = print (fac 5)
test st1 st2 = st1 == st2 && ("foo" `isInfixOf` st1' || "baz" `isInfixOf` st2)
Run Code Online (Sandbox Code Playgroud)
另一种写这个的方法是:
main = print (fac 5)
test st1 st2
| st1 == st2 && "foo" `isInfixOf` st1 = True
| st1 == st2 && "baz" `isInfixOf` st2 = True
| otherwise = False
Run Code Online (Sandbox Code Playgroud)