Пробелы обычно нужны в Rebol, но тут и там есть исключения для «специальных» символов, таких как те, которые разделяют серии.Например:
[a b c]
совпадает с [ a b c ]
(a b c)
совпадает с ( a b c )
[a b c]def
то же самоеas [a b c] def
Некоторыми довольно мощными инструментами для интроспекции синтаксических элементов являются type?
, quote
и probe
.Оператор цитаты не позволяет интерпретатору указывать поведение.Так что, если вы попробуете что-то вроде:
>> data: [x [y 10]]
>> type? data/x/y
>> probe data/x/y
"живая" природа кода будет копаться в пути и даст вам integer!
значения 10
.Но если вы используете кавычку:
>> data: [x [y 10]]
>> type? quote data/x/y
>> probe quote data/x/y
Затем вы получите path!
, значение которого просто data/x/y
, оно никогда не будет оценено.
Во внутреннем представлении, PATH!в достаточной степени похож на BLOCK!или ПАРЕН!У него просто есть этот особый характерный лексический тип, который позволяет трактовать его по-разному.Хотя вы заметили, что при выборе элементов из объекта или серии он может вести себя как «точка», но только так он используется диалектом DO.Вы можете придумать свои собственные идеи, скажем, вы делаете команду «Рассел»:
russell [
x: 10
y: 20
z: 30
x/y/z
(
print x
print y
print z
)
]
Представьте, что в моем причудливом примере это выводит 30
, 10
, 20
... потому чтофункция Рассела оценивает свой блок таким образом, что путь обрабатывается как инструкция для сдвига значений.Так что x/y/z
означает x => y, y => z и z => x.Затем любой код в скобках запускается на диалекте DO.Задания обрабатываются как обычно.
Когда вы хотите придумать новый забавный рифф о том, как выразить себя, Rebol берет на себя большую часть тяжелой работы.Так, например, скобки гарантированно совпадают, чтобы получить paren!
.Вам не нужно искать все это самостоятельно, вы просто строите свой диалект из строительных блоков всех этих различных типов ... и подключаетесь к существующему поведению (например, к диалекту DO для основ, таких как математика и общие вычисления,и умопомрачительный диалект PARSE для некоторой довольно удивительной мускулатуры, совпадающей с образцом).
Но, говоря о «всех этих разных типах», есть еще одна странная ситуация с косой чертой, которая может создать другой тип:
>> type? quote /foo
Это называется refinement!
и происходит, когда вы запускаете лексический элемент с косой чертой.Вы увидите, что он используется на диалекте DO для вызова дополнительных наборов параметров для функции.Но еще раз, это просто еще один символ LEGO в коробке с деталями.Вы можете приписать значение этому на ваших собственных диалектах, которые совершенно разные ...