Остановка на неполных по Тьюрингу языках

Я только что создал приложение с create-react-app и добавил react-router-dom, как вы сделали, и все работает нормально, единственное отличие, которое у меня есть, это некоторые версии пакетов:

{
  "name": "quicktest",
  "version": "0.1.0",
  "private": true,
  "dependencies": {
    "react": "^16.8.4",
    "react-dom": "^16.8.4",
    "react-router-dom": "^4.3.1",
    "react-scripts": "2.1.8"
  },
  "scripts": {
    "start": "react-scripts start",
    "build": "react-scripts build",
    "test": "react-scripts test",
    "eject": "react-scripts eject"
  },
  "eslintConfig": {
    "extends": "react-app"
  },
  "browserslist": [
    ">0.2%",
    "not dead",
    "not ie <= 11",
    "not op_mini all"
  ]
}

Попробуйте запустить [ 114] npm update , чтобы обновить их и перезапустить приложение.

Также, по-видимому, в выпуске 4.3.1 of react-router-dom исправлено что-то, связанное с этой ошибкой (странно, что это используемая вами версия): enter image description here [ 117]

13
задан Kyle Strand 21 July 2016 в 16:29
поделиться

3 ответа

Да. Один важный класс этого вида является примитивными рекурсивными функциями. Этот класс включает все основные вещи, которые Вы ожидаете мочь сделать с числами (дополнение, умножение, и т.д.), а также некоторые сложные классы как @adrian упомянули (регулярные выражения/конечные автоматы, контекстно-свободные грамматики/автоматы с магазинной памятью). Там, однако, существуйте функции, которые не являются примитивны рекурсивный, такие как функция Ackermann.

На самом деле довольно легко понять примитивные рекурсивные функции. Они - функции, что Вы могли войти в язык программирования, который не имел никакой истинной рекурсии (таким образом, функция f не может назвать себя, или непосредственно или путем вызывания другой функции g, который затем называет f, и т.д.), и не имеет никаких циклов с условием продолжения, вместо этого ограничив для циклов. Ограниченным для цикла является один как, "поскольку я от 1 до r", где r является переменной, которая была уже вычислена ранее в программе; также, я не могу быть изменен в для цикла. Точка такого языка программирования - то, что каждая программа останавливается.

Большинство программ, которые мы пишем, на самом деле примитивно рекурсивный (я имею в виду, может быть переведен на такой язык).

13
ответ дан 1 December 2019 в 19:23
поделиться

Проблема остановки не действует на языки. Скорее это действует на машины (т.е. программы): это спрашивает, останавливается ли данная программа на данном входе.

Возможно, Вы означали спрашивать, может ли это быть решено для других моделей вычисления (как регулярные выражения, которые Вы упоминаете, но также и как автоматы с магазинной памятью).

Остановка может, в целом, быть обнаружена в моделях с конечными ресурсами (как регулярные выражения или, эквивалентно, конечные автоматы, которые имеют постоянное число состояний и никакого внешнего устройства хранения данных). Это легко выполняется путем перечисления всех возможных конфигураций и проверки, вводит ли машина ту же конфигурацию дважды (указание на бесконечный цикл); с конечными ресурсами мы можем поместить верхнюю границу на количество времени, прежде чем мы должны будем видеть повторную конфигурацию, если машина не останавливается.

Обычно, модели с бесконечными ресурсами (неограниченные ТМ и КПК, например), не может быть проверен в останове, но было бы лучше исследовать модели и их открытые проблемы индивидуально.

(Извините за все ссылки Википедии, но это на самом деле - очень хороший ресурс для этого вида вопроса.)

16
ответ дан 1 December 2019 в 19:23
поделиться

Короткий ответ да, и такие языки могут даже быть чрезвычайно полезными.

Была дискуссия об этом несколько месяцев назад на LTU: http://lambda-the-ultimate.org/node/2846

7
ответ дан 1 December 2019 в 19:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: