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?

¿Fue útil?

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:

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 .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top