La &
meta-funzione (specifica alternativa input / output)
Il modo tradizionale di specificare il numero di argomenti di input da passare a una funzione è utilizzare la $
meta-funzione
2$: % Two-input version of :
Allo stesso modo, per specificare il numero di argomenti di output è possibile utilizzare la #
meta-funzione specificando il numero di argomenti di output,
2#S % Two-output version of sort
oppure se si passa un numero maggiore del numero di argomenti di output definiti per una funzione, viene fornito solo l' mod(N, numberOfOutputs) + 1
output.
4#S % Get only the second output of sort
È inoltre possibile specificare un array logico come input #
per recuperare solo argomenti di output specifici.
TFT#u % Three output version of unique and discard the second output
Tutte queste specifiche di input / output sono utili ma aumentano il conteggio dei byte molto rapidamente. Per far fronte a questo, MATL ha introdotto la &
meta-funzione nella versione 17.0.0 . Questa &
meta-funzione funge da collegamento per una specifica specifica di input o output per una funzione. Vediamo cosa significa.
Nel nostro esempio sopra, volevamo usare la versione a due input di :
(crea un vettore di valori equidistanti). Mentre il numero predefinito di argomenti di input :
è 1
(crea un array da [1...N]
), è molto comune che un utente voglia specificare il valore iniziale dell'intervallo che richiede il secondo input. Quindi :
, abbiamo definito &
una scorciatoia per 2$
.
10 % Push 10 to the stack
12 % Push 12 to the stack
2$: % Create an array: [10, 11, 12]
Ora diventa il seguente, salvando un byte !
10 12 &:
Come possiamo determinare qual è il numero alternativo di argomenti?
Le specifiche di input / output che si &
traducono in sono specifiche della funzione in modo tale da ottimizzare il risparmio di byte.
La sezione dell'argomento input / output della descrizione della guida per ciascuna funzione è stata aggiornata per indicare qual è questo numero alternativo di input / output (se presente). Il numero possibile di argomenti di input o output viene visualizzato come intervallo e i valori predefiniti per ciascuno sono indicati tra parentesi. Le specifiche di input / output che possono essere sostituite &
vengono visualizzate dopo il /
carattere tra parentesi.
Ecco la sezione dell'argomento input / output della descrizione della guida per :
+- Min-Max range of # of inputs
| +----- Alt. Default # of inputs
| |
V V
1--3 (1 / 2); 1 <--- Possible / Default # of outputs
^
|
Default # of inputs
Come hai determinato cosa &
significa per ciascuna funzione?
Molto attentamente. Utilizzando l' API StackExchange , siamo stati in grado di scaricare tutte le risposte MATL che siano mai state utilizzate in una sfida PPCG. Analizzando ciascuna delle risposte, siamo stati quindi in grado di determinare la frequenza con cui ogni specifica di input / output è stata utilizzata per ciascuna funzione. Usando queste informazioni siamo stati quindi in grado di identificare oggettivamente le specifiche di input / output che la &
meta-funzione dovrebbe rappresentare per ciascuna funzione. A volte non c'era un vincitore chiaro, quindi molte funzioni al momento non sono state &
definite.
Ecco lo script che abbiamo usato (purtroppo è scritto in MATLAB e non in MATL).
Ed ecco un esempio dell'istogramma di $
/ #
use