&
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).
А ось приклад гістограми з $
/ #
використання