Jump to content

БлуП и ФлуП

BlooP и FlooP ( Ограниченный цикл и Свободный цикл ) — простые языки программирования, разработанные Дугласом Хофштадтером для иллюстрации мысли из его книги «Гедель, Эшер, Бах» . [1] BlooP — это неполный по Тьюрингу язык программирования , основная структура потока управления которого представляет собой ограниченный цикл (т. е. рекурсия не разрешена). [ нужна ссылка ] ). Все программы на языке должны завершаться, а этот язык может выражать только примитивно-рекурсивные функции . [2]

FlooP идентичен BlooP, за исключением того, что он поддерживает неограниченные циклы; это тьюринг-полный язык, который может выражать все вычислимые функции . Например, он может выражать функцию Аккермана , которую (не будучи примитивно-рекурсивной) нельзя написать в BlooP. Заимствуя стандартную терминологию математической логики , [3] [4] Хофштадтер называет неограниченные циклы FlooP MU-петлями. Как и все тьюринг-полные языки программирования, FlooP страдает от проблемы остановки : программы могут не завершаться, и в целом невозможно решить, какие программы завершают работу.

BlooP и FlooP можно рассматривать как модели вычислений , и иногда их используют при обучении вычислимости. [5]

Примеры BlooP [ править ]

Единственными переменными являются OUTPUT (возвращаемое значение процедуры) и CELL(i) (неограниченная последовательность переменных натуральных чисел, индексированных константами, как в неограниченной регистровой машине [6] ). Единственные операторы ( назначение ), + (добавление), × (умножение), < (меньше, чем), > (больше чем) и = (равен).

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

Конструкции потока управления включают ограниченные циклы, условные операторы , ABORT выпрыгивает из петель и QUIT выпрыгивает из блоков. BlooP не допускает рекурсию, неограниченные переходы или что-либо еще, что имело бы тот же эффект, что и неограниченные циклы FlooP. Можно определить именованные процедуры, но они могут вызывать только ранее определенные процедуры. [7]

Факториал [ править ]

DEFINE PROCEDURE FACTORIAL [N]:
BLOCK 0: BEGIN
        OUTPUT ⇐ 1;
        CELL(0) ⇐ 1;
        LOOP AT MOST N TIMES:
        BLOCK 1: BEGIN
                OUTPUT ⇐ OUTPUT × CELL(0);
                CELL(0) ⇐ CELL(0) + 1;
        BLOCK 1: END;
BLOCK 0: END.

Функция вычитания [ править ]

Это не встроенная операция и (определяемая для натуральных чисел) никогда не дает отрицательного результата (например, 2 − 3 := 0). Обратите внимание, что OUTPUT начинается с 0, как и все CELLs и поэтому не требует инициализации.

DEFINE PROCEDURE MINUS [M,N]:
BLOCK 0: BEGIN
        IF M < N, THEN:
        QUIT BLOCK 0;
        LOOP AT MOST M + 1 TIMES:
        BLOCK 1: BEGIN
                IF OUTPUT + N = M, THEN:
                ABORT LOOP 1;
                OUTPUT ⇐ OUTPUT + 1;
        BLOCK 1: END;
BLOCK 0: END.

Пример FlooP [ править ]

Приведенный ниже пример, реализующий функцию Аккермана , основан на моделировании стека с использованием нумерации Гёделя : то есть на ранее определенных числовых функциях. PUSH, POP, и TOP удовлетворяющий PUSH [N, S] > 0, TOP [PUSH [N, S]] = N, и POP [PUSH [N, S]] = S. Поскольку неограниченное MU-LOOP используется, это не легальная программа BlooP. QUIT BLOCK инструкции в этом случае переходят в конец блока и повторяют цикл, в отличие от ABORT, который выходит из цикла. [3]

DEFINE PROCEDURE ACKERMANN [M, N]:
BLOCK 0: BEGIN
	CELL(0) ⇐ M;
	OUTPUT ⇐ N;
	CELL(1) ⇐ 0;
	MU-LOOP:
	BLOCK 1: BEGIN
		IF CELL(0) = 0, THEN:
		BLOCK 2: BEGIN
			OUTPUT ⇐ OUTPUT + 1;
			IF CELL(1) = 0, THEN: ABORT LOOP 1;
			CELL(0) ⇐ TOP [CELL(1)];
			CELL(1) ⇐ POP [CELL(1)];
			QUIT BLOCK 1;
		BLOCK 2: END
		IF OUTPUT = 0, THEN:
		BLOCK 3: BEGIN
			OUTPUT ⇐ 1;
			CELL(0) ⇐ MINUS [CELL(0), 1];
			QUIT BLOCK 1;
		BLOCK 3: END 
		OUTPUT ⇐ MINUS [OUTPUT, 1];
		CELL(1) ⇐ PUSH [MINUS [CELL(0), 1], CELL(1)];
	BLOCK 1: END;
BLOCK 0: END.

См. также [ править ]

Ссылки [ править ]

  1. ^ Дуглас Хофштадтер (1979), Гёдель, Эшер, Бах , Basic Books, Глава XIII.
  2. ^ Стэнфордская энциклопедия философии: вычислимость и сложность
  3. Перейти обратно: Перейти обратно: а б Хофштадтер (1979), с. 424.
  4. ^ Томас Форстер (2003), Логика, индукция и множества , издательство Кембриджского университета, стр. 130.
  5. ^ Дэвид Микс Баррингтон (2004), CMPSCI 601: Теория вычислений, Массачусетский университет в Амхерсте, Лекция 27 .
  6. ^ Хофштадтер называет эти ячейки набором «вспомогательных переменных».
  7. ^ Хофштадтер (1979), с. 413.

Внешние ссылки [ править ]

Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: b4028c741da101dd21078c8709af13a1__1697104140
URL1:https://arc.ask3.ru/arc/aa/b4/a1/b4028c741da101dd21078c8709af13a1.html
Заголовок, (Title) документа по адресу, URL1:
BlooP and FlooP - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)