Stata图灵完成了吗?

时间:2010-12-09 06:50:08

标签: loops stata turing-complete

我最近一直在和Stata做一些统计工作而不是非常享受。

我觉得这不是一种“适当的”编程语言:特别是我不会认为有一种方法可以循环直到满足条件。

我的感觉是正确的,还是Stata真正图灵完成?

5 个答案:

答案 0 :(得分:3)

我之前从未听说过Stata,但网页吹嘘它有“if, while”和“looping and branching”。

Wikibooks有this example

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

我不知道“正确的”编程语言意味着什么,但乍一看它肯定是图灵完成的。

答案 1 :(得分:2)

一种“适当的”编程语言,你可以用它构建一个网页或GUI吗?当然不是。但这有点极端。你当然可以用.ado和.do文件编写循环;我会说这是完整的。

答案 2 :(得分:1)

虽然你可以使用-while - , - if,-else-命令来执行循环,直到满足条件,但在Stata中通常更好的方法是在它们的位置使用-foreach-或-forvalues-循环。
所以,而不是说:

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循环被删除了 - 感谢单挑,Keith。 -else-部分仅用于if {] else {}循环示例。无论如何,我的帖子的重点不是建议使用while / else或if / else循环,而是--foreach - / - forvalues-通常是首选方法。

答案 3 :(得分:1)

@ eric.a.booth:我认为你的例子很奇怪。我不确定我见过while { ... } else {...}

另外,请注意,Stata在运行之前不会测试循环,并且会让自己陷入无限循环。

local x = 0
while `x'<5 {
   display `x' / 2
   local ++x
}

答案 4 :(得分:1)

Stata的ado语言具有所有通常的条件语句:

然而,重要的是不要混淆两者:

此外,Stata的ado语言循环结构包括:

Mata,Stata的矩阵编程语言也支持:

因此,Stata的adomata编程语言都会出现 满足被定性为图灵完成的标准。

重要的是要注意,这些是 通用编程 语言,但是成熟的统计语言