Domanda

Mi chiedevo su come scrivere do-while-style ciclo?

questo post :

  

è 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?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top