Пытаюсь расширить свой ответ, чтобы, возможно, охватить другую идею, которая может помочь вам найти то, что вы ищете.
Красный/Система
Насколько я понимаю, директива Red/System #define
может помочь с оптимизацией (уменьшая количество вызовов функций). Вот аналогичный пример в Red/System. В Red это потребовало бы использования внутри #system
или #system-global
directive.
#define COMPUTE(x) (3.13159 * 2.0 + x)
b: COMPUTE(1.0)
print b
Обработка макроса должна привести к:
b: (3.13159 * 2.0 + 1.0)
print b
и результаты
7.26318
Математика между типами еще не определена, поэтому вы столкнетесь с проблемами умножения/добавления float!
и integer!
(отсюда и вышеприведенное использование float!)
Красный/Ребол
Вы также можете взглянуть на compose
как на более высокий уровень оптимизации написания кода. Я не уверен в эффекте с точки зрения оптимизации скорости. Compose берет блок и оценивает все, что находится в скобках, а не оценивает другие элементы в блоке.
См. определение справки Rebol2 для compose
>> help compose
USAGE:
COMPOSE value /deep /only
DESCRIPTION:
Evaluates a block of expressions, only evaluating parens, and returns a block.
COMPOSE is a native value.
ARGUMENTS:
value -- Block to compose (Type: any)
REFINEMENTS:
/deep -- Compose nested blocks
/only -- Inserts a block value as a block
Это может быть то, что вы ищете с точки зрения построения выражений
red>> x: 1
== 1
red>> compose [3 + 2 + (x)]
== [3 + 2 + 1]
Пример из документации Rebol2:
>> probe compose [time: (now/time) date: (now/date)]
[time: 12:48:53 date: 5-Mar-2014]
== [time: 12:48:53 date: 5-Mar-2014]
person
kealist
schedule
03.03.2014
for (...; ...; ...)
). , фигурные скобки для блоков и т. д.)), и, вероятно, лучше всего правильно обозначить язык вашего кода. В частности, я обычно не называю код Scheme, Clojure или Arc кодом Lisp. - person Chris Jester-Young   schedule 05.03.2014