私は最近、Stata でいくつかの統計作業を行っていますが、あまり楽しんでいません。
「適切な」プログラミング言語のようには感じません。特に、条件が満たされるまでループする方法はないと思います。
私の感覚は正しいのでしょうか、それとも Stata は本当にチューリング完全なのでしょうか?
私は最近、Stata でいくつかの統計作業を行っていますが、あまり楽しんでいません。
「適切な」プログラミング言語のようには感じません。特に、条件が満たされるまでループする方法はないと思います。
私の感覚は正しいのでしょうか、それとも Stata は本当にチューリング完全なのでしょうか?
Stata のことは聞いたことがありませんが、ウェブページでは「if、while」と「ループと分岐」があると自慢しています。
Wikibooks には次の例があります。
local k = 1
file open myfile using toto.txt, read text
file read myfile line
while r(eof) == 0 {
local k = `k' + 1
di "`k' `line'"
file read myfile line
}
file close myfile
「適切な」プログラミング言語が何を意味するのかはわかりませんが、一見するとチューリング完全であるように見えます。
それを使ってウェブページやGUIを構築できるという意味での「適切な」プログラミング言語?もちろん違います。しかし、それは少し極端です。確かに、.adoファイルと.doファイルを使用してループを作成できます。チューリング完全だと思います。
@eric.a.booth: あなたの例は奇妙だと思います。今まで見たことがないwhile { ... } else {...}
また、Stata は実行前にループをテストせず、無限ループに陥る可能性があることに注意してください。
local x = 0
while `x'<5 {
display `x' / 2
local ++x
}
-while-、-if、-else- コマンドを使用して条件が満たされるまでループを実行できますが、通常、代わりに -foreach- または -forvalues- ループを使用することを Stata でお勧めします。
したがって、次のように言う代わりに:
while "`1'" != "" {
<do something>
}
また
if "`a'" == "" {
<do something>
}
else {
<do something else>
}
通常は、代わりに次のことを行う方が適切です (そしてより直感的です)。
forvalues x = 1/100 {
<do something>
}
-- -if-、-else-、または -break- 条件は必要ありません。詳細については、Stata の -help forvalues- または -help foreach- を参照してください。
^注: 元の投稿の while-else ループは削除されました。キースさん、ご指摘ありがとうございます。-else- 部分は、if{] else{} ループの例のみを対象としていました。とにかく、私の投稿のポイントは、while/else または if/else ループの使用を提案することではなく、通常は -foreach-/-forvalues- が推奨されるアプローチであるということでした。