Domanda
Mi chiedevo su come scrivere do-while-style ciclo?
è possibile utilizzare la ripetizione {} e verificare le condizioni dovunque con se () e uscire dal ciclo con la parola di controllo "pausa".
Non sono sicuro di quello che esattamente mezzi. Qualcuno può elaborare se si capisce e / o se si dispone di una soluzione diversa?
Soluzione
piuttosto auto esplicativo.
repeat{
statements...
if(condition){
break
}
}
O qualcosa del genere penserei. Per ottenere l'effetto del ciclo Do While, è sufficiente controllare per la propria condizione alla fine del gruppo di istruzioni.
Altri suggerimenti
Vedere ?Control
o R Lingua Definizione:
> y=0
> while(y <5){ print( y<-y+1) }
[1] 1
[1] 2
[1] 3
[1] 4
[1] 5
Quindi do_while
non esiste come un costrutto distinto in R, ma è possibile simularlo con:
repeat( { expressions}; if (! end_cond_expr ) {break} )
Se si desidera visualizzare la pagina di aiuto non è possibile digitare ?while
o ?repeat
alla console, ma piuttosto hanno bisogno di utilizzare ?'repeat'
o ?'while'
. Tutte le "controllo-costruisce", tra cui if
sono sulla stessa pagina e tutto il carattere necessità citando dopo il "?" così l'interprete non li vede come codice incompleto e vi darà una continuazione "+".
Sulla base delle altre risposte, ho voluto condividere un esempio di utilizzo del ciclo costrutto, mentre per ottenere un do-while comportamento. Utilizzando una semplice variabile booleana nel mentre condizione (inizializzato a TRUE), e poi controllando la nostra condizione attuale nel corso della if. Si potrebbe anche usare una parola chiave pausa al posto del Continua <- FALSE all'interno del if (probabilmente più efficiente).
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
}
}
Notando che l'utente 42 di approccio perfetto {
* "Fare mentre" = "repeat fino a quando non"
* Il codice di equivalenza:
do while (condition) # in other language
..statements..
endo
repeat{ # in R
..statements..
if(! condition){ break } # Negation is crucial here!
}
} non ha ricevuto sufficiente attenzione dagli altri, io sottolineo e portare avanti il ??suo approccio con un esempio concreto. Se non nega la condizione in do-while (tramite !
o prendendo negazione), situazioni poi distorte (1. valore persistenza 2. loop infinito) esistono seconda del corso del codice.
In 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
In 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
I ancora insistono sul fatto che, senza la negazione della condizione in do-while, la risposta di Salcedo è sbagliata. Si può controllare questo tramite la rimozione di simbolo della negazione nel codice qui sopra.