Стата Тьюринг завершает?
-
10-10-2019 - |
Вопрос
В последнее время я работаю со статистикой с Stata и не очень наслаждаюсь этим.
Мне не кажется, что это «правильный» язык программирования: в частности, я не считать Есть способ зацикнуть, пока условие не будет выполнено.
Я прав в своем чувстве, или Стата действительно заполняет?
Решение
Я никогда не слышал о Stata раньше, но веб -страница хвастается, что она есть »Если, пока" а также "петля и разветвление".
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
Я не знаю, что «Правильный» язык программирования означает, но, на первый взгляд, это определенно кажется, что Тьюринг-полное.
Другие советы
«Правильный» язык программирования в том смысле, что вы могли бы создать с собой веб -страницу или графический интерфейс? Конечно нет. Но это немного экстремально. Вы, безусловно, можете написать петли с файлами .ado и .do; Я бы сказал, что это заполнено Тьюрингом.
@Eric.a.booth: Я думаю, что ваш пример странный. Я не уверен, что когда -либо видел while { ... } else {...}
Кроме того, обратите внимание, что Stata не тестирует петлю перед тем, как запустить его, и позволит себе попасть в бесконечную петлю.
local x = 0
while `x'<5 {
display `x' / 2
local ++x
}
В то время как вы можете использовать команды -while-, -если -элс -команды для выполнения цикла до тех пор, пока условие не будет выполнено, обычно в Stata является лучшей идеей использовать петли -фухол или -фраулс на их месте.
Итак, вместо того, чтобы говорить:
while "`1'" != "" {
<do something>
}
или же
if "`a'" == "" {
<do something>
}
else {
<do something else>
}
обычно лучше (и более интуитивно понятно) вместо этого:
forvalues x = 1/100 {
<do something>
}
-Нет -if-, -else- или-прерывание. Условия необходимы. См. - help forvalues- или -Help foreach- в Stata для получения подробной информации.
^ПРИМЕЧАНИЕ: Кейт, Кейт, был удален цикл while-else в моем оригинальном посте-спасибо за головы, Кейт. Часть -эльсе была предназначена только для примера IF {] else {} цикла. Несмотря на это, смысл моего поста не заключался в том, чтобы предположить использование некоторого времени/иначе или в том случае, если/иначе цикл, это было то, что -фуч-/-forvalues-обычно предпочтительный подход.
Стата ado
Язык имеет все обычные условные заявления:
Тем не менее, важно, чтобы человек не запутал их:
Кроме того, Stata's ado
Конструкции языковой петли включают:
для (устаревшая команда по состоянию на Stata 8)
Mata
, Язык программирования матрицы Stata также поддерживает:
Следовательно, обе Статы ado
а также mata
Языки программирования, по -видимому, удовлетворяют критериям для того, чтобы быть охарактеризованными как Turing Complete.
Важно отметить, что они нет Общие языки программирования, но полноценный статистические языки.