Language agnostic 多参数开关语句
所以我今天要参加一个计算机科学考试,我必须写出大量连续的if语句。他们都有相同的基本论点,只是条件不同。整个事情让我怀疑是否有一个多参数切换语句。我想到的一个例子是: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:
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"
]