В следующем коде, можно присвоить результат GET-WORD р через SET-WORD, а затем использовать его под новым именем:Как избежать вызова функции в условиях COMPOSE?
p: :print
p [{Hello} {World}]
Но что, если вы используете сочинить, и вы находите такую ситуацию?
do compose [p: (:print)]
p [{Hello} {World}]
Это дает ошибку:
*** ERROR
** Script error: -unnamed- is missing its value argument
** Where: do
** Near: do compose [p: (:print)] p ["Hello" "World"]
Так как значения функции в блоке «живет», когда видел в интерпретаторе ... были ли они неправдоподобными как оценочный результат или нет. (Казалось бы, они должны быть инертными, если извлекается или не применяется так или иначе, в противном случае такие назначения не представляется возможным изнутри сочинить или аналогичный.)
Кажется, вы должны процитировать прибудете слов, таких как:
do compose [p: (quote :print)]
p [{Hello} {World}]
Это может сделать трюк, чтобы сделать функцию печати. Но можете ли вы сделать это, не пройдя GET-WORD или аналогично прокси?
Хорошо, чтобы указать. Я не думал процитировать цитату вне круглых скобок, и это лучше, чем другие способы, которыми я занимался. Хотя мой технический вопрос конкретно, если я могу помещать в круглые скобки COMPOSE и снаружи, чтобы разоружить его, так что ответ (по крайней мере, на то, что я хотел спросить) - «нет». – HostileFork
Нет, вы, конечно, не можете. Потому что это не КОМПОЗ, а «оружие». Для COMPOSE активные и неактивные значения не существуют в качестве различия. Это только одна особенность диалекта DO, которую вы затем явно вызываете через DO. – earl
Мне кажется, что то, что вы на самом деле хотите сделать, представляет собой сплайсинг значения в блок и требует, чтобы это значение было «неактивным» в отношении диалекта DO. В этом конкретном примере вы хотите, чтобы вы могли быть уверены, что значение всегда будет назначаться в контексте предыдущего заданного слова !. Чтобы достичь этого, вы должны создать такую же конструкцию, которая имеет желаемую семантику на диалекте DO, или выполнить контроль над окружающим кодом (например, введя QUOTE в нужном месте, как в моем ответе). – earl