Stata es Turing completo?
-
10-10-2019 - |
Pregunta
He estado haciendo un trabajo con estadísticas Stata recientemente y no disfrutando mucho.
No se siente a mí como si fuera un lenguaje de programación "adecuada": en particular, no lo hago pensar que hay una forma de bucle hasta que se cumpla una condición.
Estoy en lo cierto en mi sentimiento, o se Stata verdaderamente Turing completo?
Solución
Nunca he oído hablar de Stata antes, pero la página web se jacta de que tiene " si, mientras "y " bucles y ramificaciones ".
Wikibooks tiene este ejemplo :
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
No sé lo que "adecuada" lenguaje de programación medios, pero a primera vista que sin duda parece ser Turing completo.
Otros consejos
Un lenguaje "adecuado" programación en el sentido de que se podría construir una página web o interfaz gráfica de usuario con ella? Por supuesto no. Pero eso es un poco extremo. Puede bucles sin duda escribir con .ado y .DO archivos; Yo diría que es Turing completo.
@ eric.a.booth: Creo que su ejemplo es extraño. No estoy seguro de que he visto while { ... } else {...}
Además, nota que Stata no prueba el bucle antes de ejecutarlo, y se dejará atrapar en un bucle infinito.
local x = 0
while `x'<5 {
display `x' / 2
local ++x
}
Si bien puede utilizar los -while-, -si, comandos -else- para realizar un bucle hasta que se cumpla una condición, por lo general es una idea más clara en Stata utilizar el -foreach- o bucles -forvalues- en su lugar.
Así, en lugar de decir:
while "`1'" != "" {
<do something>
}
o
if "`a'" == "" {
<do something>
}
else {
<do something else>
}
por lo general es mejor (y más intuitivo) a su lugar de hacerlo:
forvalues x = 1/100 {
<do something>
}
- No se -if-, -else-, o condiciones -break- necesario. Ver -help forvalues- o -help foreach- en Stata para más detalles.
^ NOTA: el bucle while-demás en mi post original fue removido - gracias por los heads-up, Keith. La parte -else- estaba destinado para el ejemplo si {]} else {bucle solamente. En cualquier caso, el punto de mi post no era sugerir el uso de un bucle while / persona o si / otra cosa, era que -foreach - / -. Forvalues- son por lo general un enfoque preferido
ado
lenguaje de Stata tiene todas las sentencias condicionales habituales:
Sin embargo, es importante que no se confundan los dos:
Además, construcciones de bucle idioma ado
de Stata incluyen:
-
a (un comando fuera de la fecha a partir de Stata 8)
Mata
, lenguaje de programación de matriz de Stata también es compatible con:
En consecuencia, los lenguajes de programación y ado
mata
de Stata tanto parecen
satisfacen los criterios para ser caracterizado como Turing completo.
Es importante tener en cuenta sin embargo que estas son no programación general idiomas , pero idiomas estadísticos de pleno derecho .