[[ ... ]] как синонимы :noname ... ;

 
+
-
edit
 

Balancer

администратор
★★★★★
Хоть и расточительно тратить эти слова, могли бы на что-то ещё пригодиться, но уж больно наглядно с ними выходит :)

[[[/term] - это полный синоним слов [term]:noname[/term] (стандартное слово) и [term]&:[/term] (нестандартное, смысл сочетания - "адрес ([term]&[/term])определённого далее слова ([term]:[/term])").

[term]]]
- синоним ;.

Первое слово создаёт безымянное определение, возвращая его адрес. Второе - завершает определение как обычно.

Чаще всего слово :noname и, соответственно, сабжи требуются, если нужно передать куда-то адрес слова. Это то, что в функциональном программировании называется лямбдой.

Пример.

Слово do-players снимает со стека один параметр и выполняет его для всех игроков сервера. Если это строка - то будет интерпретировать строку. Что, однако, медленно. Ибо будет интерпретироваться во время выполнения и для каждого игрока индивидуально. Кроме того, в режиме интерпретации нельзя, например, пользоваться условиями или циклами. Пример (можно ввести из админки), который выдаёт каждому игроку сервера по 1 адене:
"1 57 items_add" do-players

Можно do-players передать не строку, а адрес (ссылку) на определённое ранее слово:

: add_one_adena   1 57 items_add ;
& add_one_adena do-players

(напомню, что & - это алиас стандартного слова ['], которое возвращает адрес на идущее следом слово)

В таком виде оно будет работать намного быстрее, но "мусорит" лишним словом.

Классическое решение - использование :noname ... ; - сделает то же самое, но без запоминания нашего временного слова в словаре:
:noname 1 57 items_add ; do-players

Но в таком виде оно всё ещё громоздко и плохо читается. А что у нас Форт? Правильно, краткость и наглядность. Переписываем то же самое с использованием синонимов:

[[ 1 57 items_add ]] do-players.

Всё. Красиво и быстро! :)
… чтобы понять рекурсию, нужно сперва понять рекурсию …  

в начало страницы | новое
 
Поиск
Настройки
Твиттер сайта
Статистика
Рейтинг@Mail.ru