Do-while-styleループの書き方について疑問に思っていましたか?
私は見つけました この投稿 :
repeat {}を使用し、if()を使用して条件を確認し、「break」コントロールWordでループを終了できます。
正確に何を意味するのかわかりません。あなたがそれを理解している場合、および/または別の解決策がある場合、誰かが詳しく説明してください。
かなり自明です。
repeat{
statements...
if(condition){
break
}
}
または、私が思うにそのような何か。 do whileループの効果を得るには、ステートメントのグループの最後で条件を確認するだけです。
?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
を含むすべての「制御構造」は同じページにあり、すべて「?」の後に文字引用符が必要です。そのため、インタープリターはそれらを不完全なコードと見なさず、継続「+」を提供します。
他の答えに基づいて、whileループ構造を使用してdo-while動作を実現する例を共有したいと思いました。 while条件(TRUEに初期化された)で単純なブール変数を使用し、ifステートメントで後で実際の条件を確認します。 ifステートメント内でcontinue <-FALSEの代わりにbreakキーワードを使用することもできます(おそらくより効率的です)。
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" = "繰り返されるまで"
*コードの等価性:
do while (condition) # in other language
..statements..
endo
repeat{ # in R
..statements..
if(! condition){ break } # Negation is crucial here!
}
}他の人から十分な注意が払われなかったので、具体的な例を通して彼のアプローチを強調し、前進させます。 do-whileで条件を否定しない場合(!
を介して、または否定をとることにより)、コードの経過に応じて歪んだ状況(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
Istillは、do-whileで条件を否定しない限り、Salcedoの答えは間違っていると主張します。上記のコードの否定記号を削除することでこれを確認できます。