Gostaria de abordar a idéia que muitos pôsteres deram, de que essa linguagem seria "inútil". Talvez fosse inútil para os humanos escreverem manualmente, com a intenção de resolver alguma tarefa em particular. No entanto, apesar de ser um caso de uso majoritário para linguagens de programação, esse certamente não é o único caso de uso. Vários casos de uso vêm à mente onde esse idioma é útil, e podemos procurar nesses campos exemplos de tais idiomas.
Em primeiro lugar alusão de Cort Amom, a genética está no local: a transformação do programa em questão (substituindo )
a 5
) pode ser visto como uma mutação . Esse tipo de manipulação é comum no campo da computação evolutiva ; em particular, algoritmos genéticos realizam essas transformações em strings , enquanto a programação genética transforma programas . Em ambos os casos, geralmente queremos atribuir significado a todas as possibilidades, pois isso produzirá o espaço de pesquisa mais compacto.
Algoritmos genéticos dependem de algum tipo de função de avaliação para strings; se usarmos um intérprete de linguagem de programação como nossa função de avaliação, teremos um cenário em que uma linguagem de programação que atribui significado a todas as seqüências possíveis é útil. Na programação genética, supõe-se que nossa função de avaliação seja um intérprete de linguagem de programação, mas podemos escolher várias representações para nossos programas; por exemplo, muitos sistemas operam em árvores de sintaxe abstrata. Se escolhermos cadeias de caracteres como nossa representação, recuperaremos o mesmo cenário dos algoritmos genéticos.
Outra situação em que podemos querer que cada string seja um programa válido é quando enumerar programas. Isso está relacionado à bijeção mencionada por CodesInChaos, mas podemos preferir operar em strings em vez de números naturais por vários motivos:
- Se houver alguma estrutura no idioma, por exemplo. podemos atribuir significado a sub-strings; isso pode ser perdido ao traduzir para números naturais. Nesse caso, podemos preferir usar strings, para raciocinar e transformar sub-strings localmente, em vez de representar o programa inteiro como um número. Isso é análogo ao modo como podemos preferir usar operações bit a bit em expressões int em vez de aritméticas, quando cada bit tem um significado individual. Isso é basicamente uma generalização do cenário evolutivo.
- Podemos querer gerar os programas sob demanda; por exemplo, podemos começar a executar um programa que é completamente indeterminado e gerar apenas (por exemplo, aleatoriamente) as instruções individuais (por exemplo, caracteres) quando / se o ponteiro da instrução os alcançar. Isso é comum na teoria algorítmica da informação, onde o programa é uma fita da máquina de Turing e o objetivo é caracterizar o comportamento de programas gerados aleatoriamente. Por exemplo, podemos formular Solomonoff antes de cadeias arbitrárias como a probabilidade de uma máquina universal de Turing com uma fita aleatória produzir essa cadeia.
Em termos de exemplos de linguagens, muitos sistemas de computação evolutiva são baseados em linguagens de pilha como a família Push . Eles tendem a permitir fluxos arbitrários de tokens (que poderíamos representar como caracteres individuais). Às vezes (como no exemplo Brainfuck de BrainSlugs83), existem restrições ao equilibrar parênteses; no entanto, podemos relacionar isso a programas auto-delimitantes , pois uma string como [
pode não ser um programa válido , mas é um prefixo de programa válido . Se imaginarmos um compilador / intérprete lendo o código-fonte do stdin, ele não rejeitará uma string como [
, simplesmente esperará por mais informações antes de continuar.
Idiomas como Lógica Combinatória Binária e Cálculo Lambda Binário surgiram diretamente do trabalho sobre a teoria da informação algorítmica, por exemplo. de http://tromp.github.io/cl/cl.html
Esse projeto de um computador universal minimalista foi motivado pelo meu desejo de apresentar uma definição concreta da Complexidade de Kolmogorov, que estuda a aleatoriedade de objetos individuais.
You are a bimbo.