Pregunta

Me preguntaba acerca de cómo escribir do-while-loop estilo?

este post :

se puede utilizar la repetición {} y comprobar las condiciones dondequiera que utilizan if () y salir del bucle con la "ruptura" palabra de control.

No estoy seguro de lo que significa exactamente. Por favor alguien puede elaborar, si usted lo entiende y / o si tiene una solución diferente?

¿Fue útil?

Solución

auto Bastante explicativo.

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

O algo por el estilo, yo pensaría. Para obtener el efecto del ciclo Do While, simplemente marque para su condición al final del grupo de instrucciones.

Otros consejos

Ver ?Control o la R lenguaje de definición:

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

Así do_while no existe como una construcción separada en I, pero que se puede fingir con:

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

Si quieres ver la página de ayuda no puede escribir o ?while ?repeat en la consola, sino más bien necesidad de utilizar ?'repeat' o ?'while'. Todos los constructos de "control", incluyendo if están en la misma página y todos los caracteres necesidad citando después de la "?" por lo que el intérprete no los ve como código incompleto y le dará una continuación "+".

Sobre la base de las otras respuestas, quería compartir un ejemplo del uso del constructo bucle while para lograr un do-while comportamiento. Mediante el uso de una variable booleana simple en el mientras la condición (inicializado a TRUE) y, a continuación, comprobar nuestra condición real más adelante en la sentencia if. También se podría utilizar una palabra reservada break en lugar del continúan <- FALSO dentro de la instrucción if (probablemente más eficiente).

  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
    }
  }

Al darse cuenta de ese usuario 42 de enfoque perfecto {
* "Hacer mientras" = "repetir hasta que no"
* El código de equivalencia:

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

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

} no recibe suficiente atención por parte de los demás, voy a destacar y que presente su acercamiento a través de un ejemplo concreto. Si uno no niega la condición de do-while (a través de ! o tomando negación), situaciones distorsionadas a continuación (valor 1. 2. persistencia bucle infinito) existir en función del curso del código.

En Gauss:

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 

En 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

Todavía insisten en que sin la negación de la condición en la do-while, la respuesta de Salcedo es erróneo. Se puede comprobar esto a través de la eliminación de símbolo de negación en el código de seguridad.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top