多个参数切换语句

时间:2011-05-03 16:15:12

标签: language-agnostic programming-languages syntax arguments switch-statement

所以今天我正在接受计算机科学考试,我不得不写出大量连续的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 > 4i > 10TF是参数是否为真。

我知道这个例子可以通过其他方式轻松完成,但我只是想展示它的用途。如果有4个参数,那将会是20个if语句,每个语句都要求你重新输入条件。

所以我的问题是,是否有任何语言可以做到这一点?或者它是否计划用于未来的语言?或者是否存在更好的方法?

6 个答案:

答案 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)

Python中的

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)))。

切换案例可以建模为函数返回值,以某种特定于域的方式表示,再次以多种语言表达,甚至大多数。