Если правильно понял условие, нет и простого условного оператора?
Нет, Вы неправильно поняли. Простой условный оператор вида
if ... then { ... } else { ... } есть.
Профессор Снэйп, а откуда такая задача, если не секрет?
Мне просто эти рассуждения напомнили рассуждения о видах "хорошей" рекурсии (гуглить по словам Bananas, Lenses and Barbed Wire). По-моему, утверждения о завершаемости или незавершаемости разных классов программ как-то естественнее разбираются в терминах ФП (всякие там лямбда-исчисления и теории типов), чем в терминах машин Тьюринга и алгоритмов.
Задача, скажем так, из практики преподавания. И даже скорее не задача, а просто вопрос. Тема для обсуждения, так сказать.
Я читаю курс "теория алгоритмов" в НГУ. К сожалению, это семестровый курс, и читается в первом семестре. Фактически вчерашним школьникам. Тами что про лямбда-исчисление и теорию типов рассказывать бесполезно, не поймут. А вот машины Тьюринга попроще, их понимают
По ходу курса я сначала рассказываю про примитивно рекурсивные функции, потом про частично рекурсивные. В конце курса возникает функция Аккермана, как пример функции, рекурсивной, но не примитивно рекурсивной. Ну и, естественно, по ходу курса время от времени ведётся неформальное обсуждение. В частности, говорится, что программирование на разных формальных языках ничего нового по сравнению с машиной Тьюринга не приносит. И обычный компьютер с потенциально бесконечной памятью эквивалентен машине Тьюринга. А если в языках программирования типа Си запретить циклы кроме
for и
goto, то разрешённые программы будут вычислять в точности примитивно рекурсивные функции.
Последнее утверждение мне всегда казалось очевидным. Но я вот тут задумался, насколько оно очевидно... И захотелось почитать мнения разных уважаемых участников форума по этому поводу.
-- Сб июл 21, 2012 23:40:58 --В терминах императивного программирования — примитивно рекурсивные функции соответствуют программным блокам, в которых используется только арифметические операции, а также условный оператор и оператор арифметического цикла (оператор цикла, в котором число итераций известно на момент начала цикла). Если же программист начинает использовать оператор цикла while, в котором число итераций заранее неизвестно и, в принципе, может быть бесконечным, то он переходит в класс частично рекурсивных функций. (Статья "Рекурсивная функция (теория вычислимости)")
Да, это, собственно, то, что я имел в виду. Рад, что Вики со мной согласна. Хотя в Вики иногда встречается чепуха, так что это, увы, не авторитет...
А вот интересно, насколько строго можно доказать процитированный тезис? Ну, то есть я верю, что можно очень строго, но насколько большим и сложным окажется доказательство?