В SICStus Prolog есть крючок для расширения цели: goal_expansion/6
, который вызывается как во время компиляции, так и во время выполнения при метакалировании. Эти вызовы несут на себе некоторые издержки во время выполнения, которые замедляют метакалирование. Цель моего расширения - только оптимизация. Таким образом, семантически цели и расширенные цели эквивалентны.Ограничение цели goal_expansion/6 только для компиляции
Как отключить такие вызовы во время выполнения?
(Кажется, мне пришлось бы отменить goal_expansion/6
, который выглядит немного грубым для меня. Это также помешает lightweight recompilation).
Я бы даже поддержал мнение о том, что оптимизация является единственным законным использованием расширения * цели *. Это означало бы, что оно всегда является необязательным и, вероятно, не должно быть сделано автоматически для метаколлажей и, возможно, даже утверждает. – jschimpf
@jschimpf: (только для спекуляций) Возможно, в других целях используется некоторая специальная обработка мета-аргументов или макроподобных вещей. Не то чтобы я знал о таком использовании. Например: добавление отладочной информации. – false