Loops 有没有任何语言有do-until循环?
是否有任何编程语言具有do-until循环 例如:Loops 有没有任何语言有do-until循环?,loops,language-features,do-loops,Loops,Language Features,Do Loops,是否有任何编程语言具有do-until循环 例如: do { <statements> } until (<condition>); do { } 直至(); 这基本上相当于: do { <statements> } while (<negated condition>); do { } while(); 注意:我正在寻找测试后的循环。Ruby直到 i=0 begin puts i i += 1 end until
do
{
<statements>
}
until (<condition>);
do
{
}
直至();
这基本上相当于:
do
{
<statements>
}
while (<negated condition>);
do
{
}
while();
注意:我正在寻找测试后的循环。Ruby直到
i=0
begin
puts i
i += 1
end until i==5
VBA
虽然我认为这里有很多人会怀疑它是否是一种真正的语言,但好吧,BASIC是微软如何开始的(我知道,对许多人来说,这是一个很弱的论据).在VB中,我们可以找到如下内容:
Reponse = InputBox("Please Enter Pwd")
Do Until Reponse = "Bob-pwr148" ...
from
x := 1
y := 0
v := 1_000
invariant
y = x - 1
until
x > 100
variant
v
loop
...
x := x + 1
y := y + 1
v := v - 1
end
埃菲尔为您提供了一个直到循环
from
x := 1
until
x > 100
loop
...
end
还有一个“交叉”循环。两者都非常强大和富有表现力
该回路的设计提供了更多功能。它的语法还有两个部分将帮助我们解决两个重要的“正确性”问题
Reponse = InputBox("Please Enter Pwd")
Do Until Reponse = "Bob-pwr148" ...
from
x := 1
y := 0
v := 1_000
invariant
y = x - 1
until
x > 100
variant
v
loop
...
x := x + 1
y := y + 1
v := v - 1
end
在上面的示例中,y在x后面1。我们期望在每次迭代之后,y始终是x-1。因此,我们使用声明布尔断言的invariant关键字创建一个循环不变量。如果y不能成为x-1,循环将立即抛出一个异常,并让我们准确地知道哪个迭代未能保持断言为真
结论
现在,我们的循环非常紧密,安全可靠,可以很好地防止失败(bug、错误)。但这是一个完全不同的构造,因为无论while/until条件如何,它都不会像while循环那样一次运行。@Jake petroles是的,你是对的。我对它进行了修改,使它在不考虑条件的情况下运行一次。所以Ruby同时具有
while
和until
两种形式,很有趣。我想知道为什么更多的语言没有这样做。Pascal有repeat-until,所以这意味着Delphi也有。@Jake-我想更多的语言没有它的原因是可以使用(几乎?)无限数量的不同控制结构。语言设计师需要选择他们想要包含在语言中的内容,以平衡复杂性/大小与方便性。有趣的是,VBA似乎既有do-while,也有do-until。这是一个很好的灵活性。@Jake,是的。VBA有时非常好用:)