2010-06-18 4 views

ответ

2

Похоже, это синтаксис стоимости строительства для отключенном, например, в отличие от слова unset!:

>> comparison: [unset! #[unset!]] 
== [unset! unset!] 

>> type? first comparison 
== word! 

>> type? second comparison 
== unset! 

>> second comparison 
>> first comparison 
== unset! 

Если вы находитесь в программном контексте вы могли бы сделать это с to-unset, но с буквальным нотация позволяет увернуться от reduce:

>> comparison: reduce ['unset! to-unset none] 
== [unset! unset!] 

>> second comparison 
>> first comparison 
== unset! 

Похоже, они зарезервировали синтаксис # [...] для более из этих видов конструкторов.

+1

BTW, проверьте некоторые из моих орехов Rebol-vs-Perl Competition в Code Golf. :) http: // stackoverflow.com/вопросы/2527477/code-golf-connect-the-dots/3066878 # 3066878 – HostileFork

+0

Rebmu выглядит довольно круто! Какая польза от REBOL! –

+0

Это становится легче, но вот тот, который я сделал прошлой ночью перед тем точечным соединением, которое я сжег, и не хотел продвигаться к точке «победы» ... уверен, что они могут быть улучшены, если вы хотите играть :) http://stackoverflow.com/questions/3034331/code-golf-rotating-maze/3060396#3060396 – HostileFork

6

#[] - это сериализованная форма для значений. Играйте с MOLD по сравнению с MOLD/ALL на консоли, чтобы почувствовать это.

4

#[] «синтаксис» на самом деле не синтаксис как таковой (не юридический синтаксис, если вы попробуете его), только частные случаи таких конструкций являются «законными», как #[unset!] синтаксиса, #[true] синтаксиса, #[false] синтаксиса, #[none!] синтаксис или синтаксис #[datatype! unset!].

Что еще интереснее, это то, что на самом деле значение #[unset!]. Это случается, значение каждого «неинициализированным» переменная в REBOL имеет (не в функции, хотя функция локальные переменные инициализируются #[none!]), а также результат таких выражений, как print 1, do [], () и т.д.

Что касается «локальных переменных функций», инициализированных до #[none!] «Я должен добавить, что только переменные, следующие за« неиспользуемой доработкой »(то есть, которые не используются в фактическом вызове), инициализируются до #[none!] вместе с переменной уточнения.

Для дальнейшего объяснения проблемы, синтаксический (обмен говор данных) разница между true и #[true] в том, что первое является слово, в то время как последнее значение логики! тип. С точки зрения семантической (Do dialect) разность меньше, поскольку (глобальное) слово интерпретируется как переменная, которая, как считается, относится к значению #[true].

1

Посмотрите на примере ниже:

trace on 
>> e: none 
Trace: e: (set-word) 
Trace: none (word) ;<<<<< 

>> e: #[none] 
Trace: e: (set-word) 
Trace: none (none) ;<<<<< 

none это слово в первом, но во втором, #[none] не слово, это значение Rebol от типа данных none!. Аналогичным образом для других значений, таких как true, false. Случай #[unset!] является особенным, так как каждая неопределенная переменная действительно имеет это значение.