FRACTRAN

FRACTRAN es un lenguaje de programación esotérico completo de Turing propuesto por John Conway .

Descripción

Un programa FRACTRAN se escribe como una lista ordenada de fracciones positivas junto con una entrada de entero positivo inicial n . El programa se inicia actualizando el entero n de la siguiente manera:

  1. para la primera fracción en la lista para la cual el producto es un número entero, reemplace con
  2. repita esta regla hasta que ninguna de las fracciones en la lista produzca un número entero cuando se multiplique por , luego deténgase.

Por ejemplo, el siguiente programa genera números primos :

Comenzando con n = 2, este programa genera la siguiente secuencia de números enteros:

2, 15, 825, 725, 1925, 2275, 425, 390, 330, 290, 770, ... Secuencia OEIS A007542

Después de 2, esta secuencia contiene las siguientes potencias de 2:

secuencia A034785 en OEIS

que son potencias primas de 2.

Entendiendo el programa FRACTRAN

El programa FRACTRAN se puede considerar como un tipo de máquina de Minsky , donde los registros se almacenan en exponentes simples en el argumento n .

Usando la numeración de Gödel , un entero positivo n puede codificar un número arbitrario de variables enteras positivas arbitrariamente grandes. El valor de cada variable se codifica como un exponente de un número primo en una factorización de entero simple. Por ejemplo, un número entero

representa el estado de un registro en el que una variable (a la que llamaremos ) contiene el valor 2 y otras dos variables ( y ) contienen el valor 1. Todas las demás variables contienen el valor 0.

El programa FRACTRAN es una lista ordenada de fracciones positivas. Cada fracción es una instrucción que prueba una o más variables representadas por los factores primos de su denominador . Por ejemplo:

comprueba dos variables y . Si y , entonces se realizan las asignaciones , , . Por ejemplo:

Dado que el programa FRACTRAN es solo una lista de fracciones, estas instrucciones de prueba y asignación son las únicas instrucciones válidas en el lenguaje FRACTRAN. Además, se aplican las siguientes restricciones:

Enlaces