Я хотел бы затронуть идею многих авторов, что такой язык будет «бесполезным». Возможно, для людей было бы бесполезно писать вручную с намерением решить какую-то конкретную задачу. Однако, несмотря на то, что он используется в большинстве случаев для языков программирования, это, конечно, не единственный вариант использования. Несколько примеров использования приходят на ум, где такой язык полезен, и мы можем посмотреть на эти поля примеры таких языков.
Во - первых , аллюзия Cort Аммона к генетике пятно на: преобразования программы в вопросе (заменив )
на 5
) можно увидеть , как мутации . Этот вид манипуляции распространен в области эволюционных вычислений ; в частности, генетические алгоритмы выполняют такие преобразования над строками , в то время как генетическое программирование преобразует программы . В любом случае мы обычно хотим присвоить значение каждой возможности, так как это даст наиболее компактное пространство поиска.
Генетические алгоритмы полагаются на какую-то функцию оценки для строк; если мы используем интерпретатор языка программирования в качестве нашей функции оценки, то у нас есть сценарий, в котором полезен язык программирования, который присваивает значение всем возможным строкам. В генетическом программировании предполагается, что наша функция оценки является интерпретатором языка программирования, но мы можем выбирать различные представления для наших программ; например, многие системы работают на абстрактных синтаксических деревьях. Если мы выбираем строки в качестве нашего представления, то мы восстанавливаем тот же сценарий, что и с генетическими алгоритмами.
Другая ситуация, когда мы можем захотеть, чтобы каждая строка была допустимой программой, - это перечисление программ. Это связано с биекцией, упомянутой CodesInChaos, но мы можем предпочесть оперировать строками, а не натуральными числами по нескольким причинам:
- Если есть какая-то структура в языке, например. мы можем присвоить значение подстрокам, это может быть потеряно при переводе в натуральные числа. В этом случае мы можем предпочесть использовать строки, чтобы рассуждать и преобразовывать подстроки локально, а не представлять целую программу как число. Это аналогично тому, как мы можем предпочесть использовать побитовые операции над целыми числами, а не арифметическими выражениями, когда каждый бит имеет индивидуальное значение. Это в основном обобщение эволюционного сценария.
- Мы можем создавать программы по запросу; например, мы могли бы начать выполнение программы, которая полностью не определена, и генерировать (например, случайным образом) отдельные инструкции (например, символы), когда / если указатель инструкции достигает их. Это распространено в алгоритмической теории информации, где программа представляет собой ленту Тьюринга, и ее цель - охарактеризовать поведение случайно сгенерированных программ. Например, мы можем сформулировать Соломонова перед произвольными строками как вероятность того, что универсальная машина Тьюринга со случайной лентой выведет эту строку.
Что касается примеров языков, многие эволюционные вычислительные системы основаны на языках стека, таких как семейство Push . Они, как правило, допускают произвольные потоки токенов (которые мы могли бы представлять как отдельные символы). Иногда (как в примере с Brainfuck в BrainSlugs83) существуют ограничения на балансировку скобок; Однако, мы можем связать это с саморазграничны программами , в том , что строка , как [
не может быть действительной программой , но она является действительным префиксом программы . Если мы представим, что компилятор / интерпретатор читает исходный код из stdin, то он не будет отклонять строку наподобие этого [
, он просто будет ждать большего ввода, прежде чем продолжить.
Такие языки, как двоичная комбинаторная логика и двоичное лямбда-исчисление, возникли непосредственно из работы над алгоритмической теорией информации, например. от http://tromp.github.io/cl/cl.html
Эта конструкция минималистического универсального компьютера была мотивирована моим желанием придумать конкретное определение сложности Колмогорова, которое изучает случайность отдельных объектов.
You are a bimbo.