Pregunta
Me preguntaba acerca de cómo escribir do-while-loop estilo?
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?
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.