Это не официальный сайт wikipedia.org 01.01.2023

FRACTRAN — Википедия

FRACTRANполный по Тьюрингу эзотерический язык программирования, предложенный Джоном Конвеем.

ОписаниеПравить

Программа на FRACTRAN записывается как упорядоченный список положительных дробей вместе с начальным положительным целочисленным входом n. Программа запускается путём обновления целого числа n следующим образом:

  1. для первой дроби f   в списке, для которой произведение n f   является целым числом, замените n   на n f  
  2. повторяйте это правило до тех пор, пока ни одна дробь в списке не выдаст целое число при умножении на n  , затем остановите.

Например следующая программа генерирует простые числа:

( 17 91 , 78 85 , 19 51 , 23 38 , 29 33 , 77 29 , 95 23 , 77 19 , 1 17 , 11 13 , 13 11 , 15 2 , 1 7 , 55 1 )  

Начиная с n = 2, эта программа генерирует следующую последовательность целых чисел:

2, 15, 825, 725, 1925, 2275, 425, 390, 330, 290, 770, ... последовательность A007542 в OEIS

После 2 эта последовательность содержит следующие степени 2:

2 2 = 4 , 2 3 = 8 , 2 5 = 32 , 2 7 = 128 , 2 11 = 2048 , 2 13 = 8192 , 2 17 = 131072 , 2 19 = 524288 ,   последовательность A034785 в OEIS

которые являются простыми степенями 2.

Понимание программы FRACTRANПравить

Программа FRACTRAN может рассматриваться как тип машины Минского, где регистры хранятся в простых показателях в аргументе n.

Используя нумерацию Гёделя, положительное целое число n может кодировать произвольное число произвольно больших положительных целочисленных переменных. Значение каждой переменной кодируется как показатель простого числа в простой факторизации целого числа. Например, целое число

60 = 2 2 × 3 1 × 5 1  

представляет состояние регистра, в котором одна переменная (которую мы будем называть v 2  ) содержит значение 2, а две другие переменные ( v 3   и v 5  ) содержат значение 1. Все остальные переменные содержат значение 0.

Программа FRACTRAN — это упорядоченный список положительных дробей. Каждая дробь представляет собой инструкцию, которая проверяет одну или несколько переменных, представленных основными факторами её знаменателя. Например:

f 1 = 21 20 = 3 × 7 2 2 × 5 1  

проверяет две переменные v 2   и v 5  . Если v 2 2   и v 5 1  , то выполняются присвоения v 2 := v 2 2  , v 5 := v 5 1  , v 3 := v 3 + 1  , v 7 := v 7 + 1  . Например:

60 f 1 = 2 2 × 3 1 × 5 1 3 × 7 2 2 × 5 1 = 3 2 × 7 1  

Поскольку программа FRACTRAN представляет собой просто список дробей, эти инструкции проверка-присвоение являются единственными допустимыми инструкциями на языке FRACTRAN. Кроме того, применяются следующие ограничения:

  • Каждый раз, когда выполняется инструкция, проверяемые переменные также уменьшаются.
  • Одна и та же переменная не может быть одновременно уменьшена и увеличена в одной инструкции (в противном случае дробь, представляющая эту инструкцию, не будет несократимой).
  • Инструкция FRACTRAN неспособна непосредственно проверить, равна ли переменная 0. Однако есть непрямой способ это сделать путём создания инструкции, которая помещается после других инструкций, которые проверяют конкретную переменную.

СсылкиПравить