Конкретный ответ:
Что касается вашего примера использования, это, честно говоря, кажется мне своего рода микрооптимизацией. Эти операции «плюс один», безусловно, не являются узким местом в вашем коде, препятствующем его быстрому выполнению, поэтому вместо этого вам следует сосредоточиться на ускорении тех частей кода, где выполняется большая часть ваших вычислений.
Если вы хотите внести это изменение только по эстетическим (написано с первого раза!) Причинам или потому, что вам просто не нравится отслеживать дополнительные, то создайте функцию для обработки, как в вашем На мой взгляд, пример - плохой выбор, потому что он делает код намного сложнее для чтения и понимания. Я бы предложил просто создать новую переменную примерно так:
windowOffset = windowWidth - 1;
lastWindowStartIdx = length(list) - windowOffset;
for windowStartIdx = 1:lastWindowStartIdx
display(list[windowStartIdx:windowStartIdx + windowOffset]);
end
Общий ответ:
Относительно вашего более общего вопроса о том, как создать настоящие встроенные функции в MATLAB, как вы можете это сделать в C или C ++, я не верю, что есть какой-либо способ сделать это. Я подумал, что, возможно, анонимная функция может соответствовать всем требованиям, но после некоторых простых сравнений по времени с количеством различных типов функций в MATLAB я обнаружил, что анонимная функция на самом деле медленнее чем хорошая старая функция для простой операции +1.
Вот примеры функций, которые я тестировал:
function parent_function
add_one_anon = @(A) A+1; %# An anonymous function
add_one_inline = inline('A+1'); %# An "inline" function
function add_one_nest %# A nested function
A = A+1;
end
%# Did the timing here ...
end
function A = add_one_sub(A) %# A subfunction
A = A+1;
end
Я выполнял каждое из этих 100 000 раз, увеличивая скалярное значение, которое начиналось с 1, и вот результаты:
| Time (sec)
------------+------------
subfunction | 0.0507
anonymous | 0.0672
nested | 0.0932
inline | 14.7095
Если бы анонимные функции действовали как настоящие встроенные функции, я бы ожидал, что они будут самым быстрым решением.