我想知道如何编写do-ylile式循环?

我发现 这个帖子:

您可以使用重复{}并在使用if()的任何地方检查条件,并使用“断路”控制词退出循环。

我不确定这是什么意思。如果您理解和/或有不同的解决方案,有人可以详细说明吗?

有帮助吗?

解决方案

非常自我解释。

repeat{
  statements...
  if(condition){
    break
  }
}

或类似的东西。要获得循环时DO的效果,只需在声明组末尾检查您的状况即可。

其他提示

?Control 或者 R语言定义:

> y=0
> while(y <5){ print( y<-y+1) }
[1] 1
[1] 2
[1] 3
[1] 4
[1] 5

所以 do_while 在R中不存在作为单独的构造,但是您可以用:

repeat( { expressions}; if (! end_cond_expr ) {break} )

如果您想查看帮助页面,则无法输入 ?while 或者 ?repeat 在控制台,但需要使用 ?'repeat' 或者 ?'while'. 。所有“控制构建”,包括 if 是否在同一页面上,所有人都需要字符引用“?”之后因此,解释器不会将它们视为不完整的代码,并为您提供延续的“+”。

在其他答案的基础上,我想分享一个使用时循环结构来实现DO-wile行为的示例。通过在段落条件(初始化为true)中使用简单的布尔变量,然后在以后在if语句中检查我们的实际条件。一个人还可以使用break关键字,而不是在if语句内部(可能更有效)中的继续< - false。

  df <- data.frame(X=c(), R=c())  
  x <- x0
  continue <- TRUE

  while(continue)
  {
    xi <- (11 * x) %% 16
    df <- rbind(df, data.frame(X=x, R=xi))
    x <- xi

    if(xi == x0)
    {
      continue <- FALSE
    }
  }

注意到用户42-'的完美方法 {
*“做” =“重复直到不”
*代码等价:

do while (condition) # in other language
..statements..
endo

repeat{ # in R
  ..statements..
  if(! condition){ break } # Negation is crucial here!
}

} 我没有得到其他人的足够关注,我会通过一个具体的例子来强调并提出他的方法。如果一个人不以do-yile否定条件(通过 ! 或通过否定),然后根据代码的过程,存在扭曲的情况(1.值持续2.无限循环)。

在高斯:

proc(0)=printvalues(y);
DO WHILE y < 5;    
y+1;
 y=y+1;
ENDO;
ENDP;
printvalues(0); @ run selected code via F4 to get the following @
       1.0000000 
       2.0000000 
       3.0000000 
       4.0000000 
       5.0000000 

在R:

printvalues <- function(y) {
repeat {
 y=y+1;
print(y)
if (! (y < 5) ) {break}   # Negation is crucial here!
}
}
printvalues(0)
# [1] 1
# [1] 2
# [1] 3
# [1] 4
# [1] 5

仍然 坚持认为,如果不否定疾病,则萨尔塞多的答案是错误的。可以通过上述代码中的删除否定符号来检查此问题。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top