Примеры слов компиляции пользовательского потока управления

Forth, как известно, позволяет пользователям изменять язык, определяя новые слова для потока управления (помимо тех, что указаны в стандарте: DO, LOOP, BEGIN, UNTIL, WHILE, REPEAT, LEAVE IF, THEN, ELSE, CASE, ENDCASE и т. д.).

Есть ли общие примеры людей, которые фактически создают свои собственные новые слова потока управления? Каковы некоторые типичные и полезные примеры? Или стандарт уже определил все, что действительно нужно людям?

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


person Raymond Hettinger    schedule 30.06.2017    source источник


Ответы (2)


Еще одно большое направление структур потока управления в Forth — это откат. Это очень выразительный и мощный механизм. Для реализации требуется манипулирование обратным адресом [Gas99].

Возврат в Forth был разработан как расширение BacFORTH М.Л.Гассананко в ~1988-1990 гг. Первые работы по этой теме были на русском языке.

Техника поиска с возвратом позволяет создавать абстрактные модули итератора и фильтра, отвечающие за просмотр наборов всех возможных значений и отбрасывание "неправильных" [Gas96b].

Для ознакомления см. краткое описание: Отслеживание с возвратом (с помощью mlg), а также многопоточность в Forth? обсуждение в comp. lang.forth может быть полезен (см. сообщения от Гасаненко).

Только один пример генератора в BacFORTH:

: (0-2)=> PRO 3 0 DO I CONT LOOP ; \ generator
: test  (0-2)=>  CR . ." : " (0-2)=>  .  ;
test CR

Выход:

0 : 0 1 2
1 : 0 1 2
2 : 0 1 2

PRO и CONT — это специальные слова потока управления. PRO обозначает слово генератора, а CONT вызывает потребителя — это что-то вроде yield в Ruby или ECMAScript. Ряд других специальных слов также определен в BacFORTH. Вы можете играть с BacFORTH в SP-Forth (просто включите ~profit/lib/bac4th.f библиотеку).

Этимология

В общем, обратный поиск — это всего лишь алгоритм поиска решений. В Прологе этот алгоритм был встроен «под капот», поэтому откат в Прологе — это процесс, как это работает сами. Возврат в BacFORTH — это метод программирования, поддерживаемый набором специальных управляющих слов потока.

использованная литература

person ruvim    schedule 10.07.2017
comment
Спасибо. Это было поразительно. Знаете ли вы, возможны ли также продолжения, сопрограммы и конечные автоматы? - person Raymond Hettinger; 11.07.2017
comment
Не могли бы вы немного рассказать о том, что такое возврат (для будущих читателей)? - person Peter Mortensen; 27.07.2017
comment
@PeterMortensen Я добавил некоторую информацию и ссылки, пожалуйста, дайте мне знать, если здесь уместно более подробная информация. - person ruvim; 09.08.2017

Вот один пример. CASE было несколько запоздалым дополнением к набору слов потока управления Forth. В начале 1980 года в Forth Dimensions был объявлен конкурс на определение лучшего положения CASE. Позже в том же году это было урегулировано ничьей между тремя участниками. Один из них попал в стандарт Forth94.

person Lars Brinkhoff    schedule 30.06.2017
comment
Насколько мне известно, CATCH и THROW также существовали как определяемые пользователем структуры управления, прежде чем они стали стандартными. - person Philippos; 03.07.2017