В Rebol обычно требуются пробелы, но есть исключения кое-где для "специальных" символов, таких как ограничивающие серии. Например:
[a b c]
совпадает с [ a b c ]
(a b c)
совпадает с ( a b c )
[a b c]def
совпадает с [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»:
russell [
x: 10
y: 20
z: 30
x/y/z
(
print x
print y
print z
)
]
Представьте, что в моем фантастическом примере это выводит 30
, 10
, _19 _..., потому что функция Рассела оценивает свой блок таким образом, что путь рассматривается как инструкция для сдвига значений. Итак, x/y/z
означает x => y, y => z и z => x. Тогда любой код в скобках запускается на диалекте DO. Задания обрабатываются нормально.
Когда вы хотите сочинить новый веселый рифф о том, как выразить себя, Rebol берет на себя большую часть тяжелой работы. Так, например, круглые скобки гарантированно совпадают, чтобы получить paren!
. Вам не нужно искать все это самостоятельно, вы просто создаете свой диалект из строительных блоков всех этих разных типов ... и подключаетесь к существующему поведению (например, диалекту DO для таких основ, как математика и общие вычисления, и умопомрачительный диалект PARSE для довольно удивительного мускула, соответствующего образцу).
Но, говоря о «всех этих разных типах», есть еще одна странная ситуация с косой чертой, которая может создать другой тип:
>> type? quote /foo
Это называется refinement!
и происходит, когда вы начинаете лексический элемент с косой черты. Вы увидите, что он используется в диалекте DO для вызова необязательных наборов параметров функции. Но опять же, это просто еще один символический LEGO в коробке с деталями. Вы можете приписать ему смысл на своих диалектах, который совершенно иной ...
person
HostileFork says dont trust SE
schedule
25.01.2013