Обратите внимание: я готов дать вознаграждение за любой ответ, который мне кажется интересным.
Ваша задача состоит в том, чтобы спроектировать компьютер с полным набором инструкций по Тьюрингу (OISC):
OISC - это абстрактная машина, которая использует только одну инструкцию - избавляя от необходимости кода операции машинного языка. Благодаря разумному выбору одной инструкции и неограниченным ресурсам, OISC может быть универсальным компьютером так же, как традиционные компьютеры с несколькими инструкциями.
Вот несколько примеров отдельных команд, которые делают OISC-полный по Тьюрингу.
Правила:
Вы должны предоставить интерпретацию или доказательство этого
Вы должны предоставить переводчика для вашего языка. Этот интерпретатор должен быть ограничен только памятью / временем (например, он не должен иметь никаких ограничений, наложенных пользователем). Если вы не предоставляете переводчика для вашего языка (по любой причине, кроме лени), вы должны доказать, что он может быть написан. Переводчик должен быть возможным .
Вы должны доказать его Тьюринговую полноту
Вы должны приложить формальное доказательство того, что ваш язык завершен по Тьюрингу. Простой способ сделать это - доказать, что он может интерпретировать или иметь то же поведение, что и другой язык, полный по Тьюрингу. Основным языком для интерпретации будет Brainf ** k .
Например, обычный язык, который имеет все те же команды, что и Brainf ** k (и такое же отсутствие ограничений памяти, наложенных пользователем), является полным по Тьюрингу, потому что все, что может быть реализовано в Brainf ** k, может быть реализовано на языке ,
Вот список очень простых в реализации языков, полных тьюринга.
Дополнительные требования OISC
Этот OISC должен иметь только одну инструкцию - он не может иметь несколько инструкций, одна из которых делает его выполненным по Тьюрингу.
Ваш OISC может использовать любой синтаксис, который вам нравится. Вы должны определить в своем ответе, что такое инструкция, что такое данные, а что нет (например, пробел). Будь креативным!
Аргументы не просто должны быть целыми числами. Например, /// является прекрасным примером OISC, полного по Тьюрингу.
Как и если ввод и вывод взяты и даны, остается на ваше усмотрение. Большинство OISC реализуют ввод / вывод через определенные области памяти, но могут быть другие способы сделать это, и вам рекомендуется найти один из них.
Правильный ответ должен содержать пример кода в вашем OISC, либо путем включения его в сообщение, либо с помощью ссылки на простую задачу, решаемую на языке.
голосование
Избиратели, пожалуйста, помните, чтобы не голосовать против скучных представлений. Примеры:
- Lenguage -эквиваленты
- Реализация существующего OISC (ответчики, пожалуйста, создайте свой собственный!)
- «OISC», в котором первый аргумент указывает команду для вызова ( пример )
Тем не менее, вы должны поддержать интересные, творческие материалы, такие как:
- OISC на основе математического уравнения
- Завершенный по Тьюрингу ZISC на основе нейронной сети
- OISC, в котором вывод ввода-вывода происходит другими способами, чем определенные области памяти
выигрыш
Как и в конкурсе популярности , ответ с наибольшим количеством голосов выигрывает! Удачи!