&
Meta-Function (Alternative Wejście / Wyjście Specyfikacja)
Tradycyjnym sposobem określania liczby argumentów wejściowych przekazywanych do funkcji jest użycie $
meta-funkcji
2$: % Two-input version of :
Podobnie, aby określić liczbę argumentów wyjściowych, możesz użyć #
meta-funkcji określającej liczbę argumentów wyjściowych,
2#S % Two-output version of sort
lub jeśli przekażesz liczbę większą niż liczba argumentów wyjściowych zdefiniowanych dla funkcji, tylko dane mod(N, numberOfOutputs) + 1
wyjściowe są dostarczane.
4#S % Get only the second output of sort
Możesz dodatkowo określić tablicę logiczną jako dane wejściowe, #
aby pobrać tylko określone argumenty wyjściowe.
TFT#u % Three output version of unique and discard the second output
Wszystkie te dane wejściowe / wyjściowe są przydatne, ale bardzo szybko zwiększają liczbę bajtów. Aby temu zaradzić, MATL wprowadził &
meta-funkcję w wersji 17.0.0 . Ta &
meta-funkcja działa jako skrót do określonej specyfikacji wejścia lub wyjścia dla funkcji. Zobaczmy, co to znaczy.
W powyższym przykładzie chcieliśmy użyć wersji z dwoma wejściami :
(tworzy wektor wartości o równych odstępach). Chociaż domyślną liczbą argumentów wejściowych :
jest 1
(tworzy tablicę z [1...N]
), bardzo często użytkownik chce określić wartość początkową zakresu, który wymaga drugiego wejścia. Dlatego :
zdefiniowaliśmy &
skrót 2$
.
10 % Push 10 to the stack
12 % Push 12 to the stack
2$: % Create an array: [10, 11, 12]
Teraz staje się następujący, zapisując bajt !
10 12 &:
Jak możemy ustalić, jaka jest alternatywna liczba argumentów?
&
Przekłada się na specyfikację wejścia / wyjścia, która jest specyficzna dla funkcji, dzięki czemu optymalizujemy oszczędność bajtów.
Sekcja argumentów wejścia / wyjścia w opisie pomocy dla każdej funkcji została zaktualizowana, aby wskazać, jaka jest ta alternatywna liczba wejść / wyjść (jeśli występuje). Możliwa liczba argumentów wejściowych lub wyjściowych jest wyświetlana jako zakres, a wartości domyślne dla każdego z nich są wyświetlane w nawiasach. Specyfikacja wejścia / wyjścia, którą można zastąpić, &
jest pokazana po /
znaku w nawiasach.
Oto sekcja argumentów wejścia / wyjścia w opisie pomocy dla :
+- Min-Max range of # of inputs
| +----- Alt. Default # of inputs
| |
V V
1--3 (1 / 2); 1 <--- Possible / Default # of outputs
^
|
Default # of inputs
Jak ustaliłeś, co &
oznacza dla każdej funkcji?
Bardzo ostrożnie. Korzystając z interfejsu API StackExchange , byliśmy w stanie pobrać wszystkie odpowiedzi MATL, które były kiedykolwiek używane w wyzwaniu PPCG. Analizując każdą z odpowiedzi, byliśmy w stanie określić częstotliwość, z jaką każda specyfikacja wejścia / wyjścia była używana dla każdej funkcji. Korzystając z tych informacji, byliśmy w stanie obiektywnie zidentyfikować specyfikację wejścia / wyjścia, którą &
meta-funkcja powinna reprezentować dla każdej funkcji. Czasami nie było wyraźnego zwycięzcy, więc wiele funkcji obecnie nie zostało &
zdefiniowanych.
Oto skrypt, którego użyliśmy (niestety jest napisany w MATLAB, a nie MATL).
I tu jest przykładem histogramu z $
/ #
użytkowania