所以今天我正在接受计算机科学考试,我不得不写出大量连续的if语句。所有这些都有相同的基本论点,只是条件不同。整件事让我想知道是否有一个多参数切换语句。我正在考虑的一个例子是:
int i = 7;
switch(i > 4, i < 10) {
case T, T:
return "between 4 and 10";
case T, F:
return "greater than 10";
case F, T:
return "less than 4";
case F, F:
return "your computer's thinking is very odd";
}
在这种情况下,参数为i > 4
和i > 10
,T
和F
是参数是否为真。
我知道这个例子可以通过其他方式轻松完成,但我只是想展示它的用途。如果有4个参数,那将会是20个if语句,每个语句都要求你重新输入条件。
所以我的问题是,是否有任何语言可以做到这一点?或者它是否计划用于未来的语言?或者是否存在更好的方法?
答案 0 :(得分:6)
很难说“没有语言可以做到这一点”,因为几乎可以肯定有人正在研究某种实验性语言或两种语言。但是,大多数过程语言都没有这种功能。
在您的示例中,我认为您的意思是T, F
等意味着“第一个表达式求值为True 而第二个求值为False”(即{{ 1}}是逻辑AND)。这让人联想到一些决策表语言,其中处理涉及查找满足的决策表的第一行并执行该行的操作。除此之外,我不知道有任何类似的语言。
答案 1 :(得分:3)
至少在允许从bool转换为int的语言中,您可以非常轻松地处理这个问题。您基本上只是将两个布尔值转换为位映射整数值。由于你有两个布尔值,你可以直接使用一个布尔值作为结果的第0位,另一个则乘以2作为结果的第二位。
int i = 7;
int range = (i>4) | (i<10)*2;
switch(range) {
case 3: return "between 4 and 10";
case 2: return "greater than 10";
case 1: return "less than 4";
case 0: return "your computer's thinking is very odd";
}
答案 2 :(得分:3)
在 Mathematica :
Switch[{i > 4, i < 10},
{True, True}, "between 4 and 10",
{True, False}, "greater than 10",
{False, True}, "less than 4",
{False, False}, "your computer's thinking is very odd"
]
当然,这打印出4小于4,10并且大于10,但那是你的伪代码。
对于这个具体案例,最好写一下:
Which[
i < 4, "less than 4",
4 <= i <= 10, "between 4 and 10",
i > 10, "greater than 10",
True, "your computer's thinking is very odd"
]
答案 3 :(得分:1)
:
i = 7
test = (i > 4, i < 10)
print test
if test == (True, True):
print "between 4 and 10"
elif test == (True, False):
print "greater than 10"
elif test == (False, True):
print "less than 4"
elif test == (False, False):
print "your computer's thinking is very odd"
答案 4 :(得分:1)
您几乎可以使用这么多种语言,而无需任何特殊语言支持。例如,在ruby中:
i = 7
case ([i > 4, i < 10])
when [true, true]:
puts "between 4 and 10"
when [true, false]:
puts "greater than 10"
...
end
或者在groovy中:
i = 7
switch([i > 4, i < 10]) {
case [[true, true]]:
println "between 4 and 10"
break;
case [[true, false]]:
println "greater than 10"
break;
...
}
答案 5 :(得分:0)
我同意Ted当然 - 很难说可能存在哪种语言。但是你的逻辑很多都可以处理。
您的开关只是首先翻译为if(许多语言中的if ((i > 4) && (i < 10))
)。
切换案例可以建模为函数返回值,以某种特定于域的方式表示,再次以多种语言表达,甚至大多数。