Haskell 大小写表达式中的组匹配
我有一个变量,比如Haskell 大小写表达式中的组匹配,haskell,Haskell,我有一个变量,比如 a = 3 对于a的某些值,我有相同的函数要调用: case a of 3 -> print "hello" 4 -> print "hello" 5 -> print "hello" 6 -> print "hello something else" 对于a=3,a=4和a=5,我进行相同的函数调用。 我能把这些更好地分组吗?我在寻找一个解决方案,它是: case a of 3 || 4 || 5
a = 3
对于a的某些值,我有相同的函数要调用:
case a of
3 -> print "hello"
4 -> print "hello"
5 -> print "hello"
6 -> print "hello something else"
对于a=3,a=4和a=5,我进行相同的函数调用。
我能把这些更好地分组吗?我在寻找一个解决方案,它是:
case a of
3 || 4 || 5 -> print "hello"
6 -> print "hello something else"
这当然行不通,但希望你能达到我想要的结果
谢谢。怎么样
case a of
_ | a == 3 || a == 4 || a == 5
-> print "hello"
6 -> print "hello something else"
写起来就不那么乏味了
case a of
_ | a `elem` [3, 4, 5]
-> print "hello"
6 -> print "hello something else"
或
(我想您已经了解了
。
是一个与任何值都匹配的通配符。)您可以做不同的事情来改进代码。首先,如果所有分支都调用相同的函数,那么为什么不:
print (case a of
3 -> "hello"
4 -> "hello"
5 -> "hello"
6 -> "hello something else")
这将更多地考虑到代码的常见行为。第二,您似乎询问如何将3、4和5个案例组合在一起,最好的方法可能是考虑分类函数:
let cat 3 = True
cat 4 = True
cat 5 = True
cat 6 = False
in print (case cat a of True -> "hello"
False -> "hello something else")
您可以将其与上一张海报建议的备选方案之一结合使用(
cat x=x
elem[3,4,5]
等)。整洁!我只在函数定义的LHS上见过守卫——我不知道在任何模式匹配中都可以做到。如果Haskell允许您的建议,这将是一个很好的特性。
print (case a of
3 -> "hello"
4 -> "hello"
5 -> "hello"
6 -> "hello something else")
let cat 3 = True
cat 4 = True
cat 5 = True
cat 6 = False
in print (case cat a of True -> "hello"
False -> "hello something else")