Как посмотреть корки в моем языке программирования?

StackOverflow https://stackoverflow.com/questions/2618254

  •  26-09-2019
  •  | 
  •  

Вопрос

Я создал языком программирования Turging-Complete (уже доказанный), так что должно быть возможно написать поручитель Для этого, верно?

Но все квины, которые я знаю, храните их исходный код в строке, а затем заменить специальный символ в нем, используя что-то вроде chr а также ord.

Мой язык имеет только следующее

  • Основная арифметика
  • INT и типы строки
  • Переменные
  • == Оператор
  • Условные Gotos

Я понятия не имею, как я могу написать креан, как у меня есть Нет реальных строковых манипуляций, Я могу только выводить постоянные строки. Тем не менее, это 100% Turing-Complete.

Это было полезно?

Решение

Если у вас есть целые числа, вы можете кодировать или декодировать строки (схемы как A = 1, B = 2 и т. Д., Достаточно сделать это). Вам нужно только иметь возможность сравнивать постоянные строки или сравнить int. Следовательно, кажется, нет фундаментальной проблемы.

Вы работаете с номерами и пишу вещи, как

if (n == 1) print "A"
if (n == 2) print "B"
...

Там могут быть некоторые практические трудности. Дело с строками не в том, что у вас есть персонажи в нем, но они эквивалентны очень большими числам. То, что вам нужно, - либо иметь доступ к неограниченным точным номерам или к какому родаму количеству номеров фиксированного размера или другой большой структуры данных. Массив номеров сделает для вас, что может сделать строку. Но если ваш язык зарабатывает завершено, он должен иметь способ легко получить доступ к большому количеству памяти

Turing Complete Language, ограниченный 32-битными лентами (или где вы должны дать новое имя каждому другому пространству памяти 32 бита), не уверена, что вы могли бы написать акцию с таким ограничением. Кстати, было бы интересно узнать, как вы доказали, что ваш язык выступил завершенным, если у вас нет массивов или аналогичной структуры. Обычный метод, который я обычно использую, является реализация некоторых Turging Machine, используя мой язык. Но чтобы это сделать, мне нужен какой-то массив для моделирования группы.

Этот вид кодирования в основном в основном то, что Гедель сделал в теореме нефтетации, найдет какой-то способ кодировать логические выражения как целые числа, а затем причина этого.

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

Другие советы

Если ваш язык создается завершенным, и есть один квион, там, скорее всего, бесконечно многие из них. Вот способ построить только некоторые из них:

  1. Реализовать А. Мозги (или какой-то другой простой полный язык) переводчик на вашем языке. Напишите свою программу такую, чтобы источник X1<brainfuck source>Y1 При запуске интерпретирует программу Brainfuck.
  2. Написать алгоритм string f(string a, string b) на любом языке по вашему выбору, это когда придано любой a а также b выводит программу Brainfuck, которая при запуске выводит строку a, весь исходный код Brainfuck, затем строка b. Отказ Вы можете адаптировать существующие мозги Brainfuck, чтобы сделать это.
  3. Рассчитать f(X1, Y1) а затем встроить полученную программу Brainfuck в вашу программу от 1.

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

Шаг два доказано, что это возможно уже и не зависит от вашего языка программы.

Шаг три - простой расчет.

По-видимому, программа на вашем языке программирования - это строка. Вывод корки - это программа.

Следовательно, выходной сигнал является строкой. Если у вас нет никаких строковых манипуляций, невозможно написать один.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top