&Meta-Function (Alternative Input / Output Specification)
Традиционный способ указать количество входных аргументов для передачи в функцию заключается в использовании $мета-функции
2$: % Two-input version of :
Точно так же, чтобы указать количество выходных аргументов, вы можете использовать #мета-функцию, указав количество выходных аргументов,
2#S % Two-output version of sort
или если вы передаете число, которое больше числа выходных аргументов , определенные для функции, толькоmod(N, numberOfOutputs) + 1 выход подается.
4#S % Get only the second output of sort
Вы можете дополнительно указать логический массив в качестве входных данных #для получения только определенных выходных аргументов.
TFT#u % Three output version of unique and discard the second output
Все эти спецификации ввода / вывода удобны, но они очень быстро увеличивают количество байтов. Чтобы справиться с этим, MATL представил &мета-функцию в выпуске 17.0.0 . Эта& мета-функция действует как ярлык для конкретной спецификации ввода или вывода для функции. Посмотрим, что это значит.
В нашем примере выше мы хотели использовать версию с двумя входами :(создает вектор с одинаково расположенными значениями). Хотя число входных аргументов по умолчанию :равно 1(создает массив из [1...N]), очень часто пользователь хочет указать начальное значение диапазона, который требует второго ввода. Итак, для :, мы определили, &чтобы быть ярлыком для 2$.
10 % Push 10 to the stack
12 % Push 12 to the stack
2$: % Create an array: [10, 11, 12]
Теперь делается следующее, сохраняя байт !
10 12 &:
Как мы можем определить, что такое альтернативное количество аргументов?
Спецификация ввода / вывода, которая &преобразуется в, зависит от конкретной функции, поэтому мы оптимизируем экономию байтов.
Раздел аргументов ввода / вывода описания справки для каждой функции был обновлен, чтобы указать, каково это альтернативное количество входов / выходов (если есть). Возможное количество входных или выходных аргументов отображается в виде диапазона, а значения по умолчанию для каждого из них показаны в скобках. Спецификация ввода / вывода, которую можно заменить, &отображается после /символа в скобках.
Вот раздел ввода / вывода аргумента описания справки для :
+- Min-Max range of # of inputs
| +----- Alt. Default # of inputs
| |
V V
1--3 (1 / 2); 1 <--- Possible / Default # of outputs
^
|
Default # of inputs
Как вы определили что & значит для каждой функции?
Очень осторожно. Используя API StackExchange , мы смогли загрузить все ответы на MATL, которые когда-либо использовались в тесте PPCG. Анализируя каждый из ответов, мы смогли определить частоту, с которой каждая спецификация ввода / вывода использовалась для каждой функции. Используя эту информацию, мы смогли объективно определить спецификацию ввода / вывода, которую &мета-функция должна представлять для каждой функции. Иногда не было явного победителя, поэтому многие функции в настоящее время не &определены.
Вот скрипт, который мы использовали (к сожалению, он написан на MATLAB, а не на MATL).
А вот пример гистограммы из $/ #использования