FRACTRAN

Матеріал з testwiki
Версія від 02:57, 17 вересня 2023, створена imported>InternetArchiveBot (Reformat 1 URL (Wayback Medic 2.5)) #IABot (v2.0.9.5) (GreenC bot)
(різн.) ← Попередня версія | Поточна версія (різн.) | Новіша версія → (різн.)
Перейти до навігації Перейти до пошуку

FRACTRAN — повна за Тюрінгом езотерична мова програмування, яку запропонував Джон Конвей.

Опис

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

  1. для першого дробу f у списку, для якого добуток nf є цілим числом, замініть n на nf
  2. повторюйте це правило доти, поки жоден дріб у списку не видасть цілого числа при множенні на n, потім зупиніть.

Наприклад така програма генерує прості числа[ком. 1]:

(1791,7885,1951,2338,2933,7729,9523,7719,117,1113,1311,152,17,551)

Починаючи з n = 2, ця програма генерує таку послідовність цілих чисел:

2, 15, 825, 725, 1925, 2275, 425, 390, 330, 290, 770, … Шаблон:OEIS

Після 2 ця послідовність містить такі степені 2:

22=4,23=8,25=32,27=128,211=2048,213=8192,217=131072,219=524288, Шаблон:OEIS

які є простими степенями 2.

Розуміння програми FRACTRAN

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

Використовувати нумерацію Геделя, додатне ціле число n може кодувати довільне число довільно великих додатних цілочислових змінних[ком. 2]. Значення кожної змінної кодується як показник простого числа в простій факторизації цілого числа. Наприклад, ціле число

60=22×31×51

представляє стан регістра, в якому одна змінна (яку ми будемо називати v2) містить значення 2, а дві інші змінні (v3 і v5) містять значення 1. Всі інші змінні містять значення 0.

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

f1=2120=3×722×51

перевіряє дві змінні v2 і v5. Якщо v22 і v51, то виконуються присвоєння v2:=v22, v5:=v51, v3:=v3+1, v7:=v7+1. Наприклад:

60f1=22×31×513×722×51=32×71

Оскільки програма FRACTRAN є просто списком дробів, ці інструкції перевірка-присвоєння є єдиними допустимими інструкціями в мові FRACTRAN. Крім того, застосовуються такі обмеження:

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

Коментарі

  1. У Книзі чисел Джон Конвей і Річард Ґай дали трохи іншу послідовність: (1791,7885,1951,2338,2933,7729,9523,7719,117,1113,1311,1514,152,551)
  2. Нумерацію Геделя не можна безпосередньо застосувати для від'ємних цілих чисел, чисел з рухомою комою або текстових рядків, хоча можна домовитись щодо непрямого подання цих типів даних. Пропоновані розширення до FRACTRAN включають FRACTRAN++ Шаблон:Webarchive і Bag Шаблон:Webarchive.

Примітки

Шаблон:Примітки

Посилання

Шаблон:Мови програмування