Language agnostic 多参数开关语句

Language agnostic 多参数开关语句,language-agnostic,programming-languages,syntax,arguments,switch-statement,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:

所以我今天要参加一个计算机科学考试,我必须写出大量连续的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";
}
inti=7;
开关(i>4,i<10){
案例T,T:
返回“介于4和10之间”;
案例T、F:
返回“大于10”;
案例F、T:
返回“小于4”;
案例F、F:
return“你的电脑思维很奇怪”;
}
在这种情况下,参数是
i>4
i>10
,而
T
F
是参数是否为真

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

所以我的问题是,有没有这样的语言?或者它是为未来的语言而设计的?或者还有更好的方法吗?

很难说“没有语言能做到这一点”,因为几乎可以肯定有人在研究一两种实验语言。然而,大多数过程语言没有这种特性


在您的示例中,我认为您指的是
T、F
等,意思是“第一个表达式的计算结果为True,第二个表达式的计算结果为False”(也就是说,
是逻辑和逻辑的)。这让人想起一些决策表语言,其中的处理涉及查找满足条件的决策表的第一行并执行该行的操作。除此之外,我不知道有哪种语言有这样的语言。

我当然同意Ted的观点——很难说可能存在什么语言。但是你的逻辑可以在很多方面处理

您的开关首先转换为if(类似于许多语言中的
if((i>4)&&(i<10))

切换情况可以建模为函数返回值,以特定于域的方式表示,同样,在许多语言中,甚至在大多数语言中也是如此。

在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"
i=7
测试=(i>4,i<10)
打印测试
如果测试==(真,真):
打印“介于4和10之间”
elif测试==(真、假):
打印“大于10”
elif测试==(假,真):
打印“小于4”
elif测试==(假,假):
打印“你的电脑思维很奇怪”

您几乎可以使用多种语言,而无需任何特殊的语言支持。例如,在ruby中:

i = 7
case ([i > 4, i < 10])
when [true, true]:
    puts "between 4 and 10"
when [true, false]:
    puts "greater than 10"
...
end
i=7
病例([i>4,i<10])
当[真的,真的]:
将“介于4和10之间”
当[对,错]:
放置“大于10”
...
结束
或者在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;
...
}
i=7
开关([i>4,i<10]){
案例[[对,对]]:
println“介于4和10之间”
打破
案例[[正确,错误]]:
println“大于10”
打破
...
}

至少在允许从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";
}
inti=7;
整数范围=(i>4)|(i在Mathematica中:

开关[{i>4,i<10},
{True,True},“介于4和10之间”,
{True,False},“大于10”,
{False,True},“小于4”,
{False,False}“你的电脑思维很奇怪”
]
当然,这会打印出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"
]
哪个[
i<4,“小于4”,

4实验性的,如Python(元组)。Python没有开关。但在几个函数语言中的模式匹配应该非常接近(至少Haskell允许(True,True)->x的
情况(p,q)…
)。是的,你是对的,只有if-elif-else结构是等效的。我猜还有其他结构支持switch和if语句中的元组。谢谢。我不知道这样的表语言。它们会处理有,比如说,10个参数的事情吗。我知道没有理由这样做,只是举个例子。@Jon-Decision-ta可编程语言(已经存在了半个世纪)有很多种风格。一些处理大量决策变量。逻辑语言,如Prolog和基于AI的函数语言,如Scheme或OPS5及其后续衍生工具,也可以这样做,并可以处理大量决策变量。我想我理解你是如何做的,但你会如何做呢比如4个参数?因为如果你将你使用的模式中的每个值相乘,结果会不会重叠,留下一个不准确的机会?@Jon:你只是使用了两个连续的幂,所以:
cond1*1 | cond2*2 | cond3*4 | cond4*8
。也许用:
cond1 | cond2Okay,我以为你是在乘法而不是在加电。t感谢您的澄清。+1是的,
,这对于处理多个尚未敲入单一维度的标准特别方便。
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"
]