La &
méta-fonction (spécification alternative d'entrée / sortie)
La manière traditionnelle de spécifier le nombre d'arguments d'entrée à passer à une fonction consiste à utiliser la $
méta-fonction
2$: % Two-input version of :
De même, pour spécifier le nombre d'arguments de sortie, vous pouvez utiliser la #
méta-fonction spécifiant soit le nombre d'arguments de sortie,
2#S % Two-output version of sort
ou si vous passez un nombre supérieur au nombre d'arguments de sortie définis pour une fonction, seule la mod(N, numberOfOutputs) + 1
sortie est fournie.
4#S % Get only the second output of sort
Vous pouvez en outre spécifier un tableau logique comme entrée #
pour récupérer uniquement des arguments de sortie spécifiques.
TFT#u % Three output version of unique and discard the second output
Toutes ces spécifications d'entrée / sortie sont pratiques mais elles augmentent très rapidement le nombre d'octets. Pour y faire face, MATL a introduit la &
méta-fonction dans la version 17.0.0 . Cette &
méta-fonction agit comme un raccourci pour une spécification d'entrée ou de sortie particulière pour une fonction. Voyons ce que cela signifie.
Dans notre exemple ci-dessus, nous voulions utiliser la version à deux entrées de :
(crée un vecteur de valeurs également espacées). Alors que le nombre par défaut d'arguments d'entrée :
est 1
(crée un tableau à partir de [1...N]
), il est très courant qu'un utilisateur veuille spécifier la valeur de début de la plage qui nécessite la deuxième entrée. Donc, pour :
, nous avons défini &
un raccourci pour 2$
.
10 % Push 10 to the stack
12 % Push 12 to the stack
2$: % Create an array: [10, 11, 12]
Devient maintenant le suivant, économisant un octet !
10 12 &:
Comment déterminer le nombre alternatif d'arguments?
La spécification d'entrée / sortie qui se &
traduit par est spécifique à la fonction de sorte que nous optimisons les économies d'octets.
La section des arguments d'entrée / sortie de la description de l'aide pour chaque fonction a été mise à jour pour indiquer quel est ce nombre alternatif d'entrées / sorties (le cas échéant). Le nombre possible d'arguments d'entrée ou de sortie est affiché sous forme de plage et les valeurs par défaut pour chacun sont affichées entre parenthèses. La spécification d'entrée / sortie qui peut être remplacée par &
est indiquée après le /
caractère entre parenthèses.
Voici la section des arguments d'entrée / sortie de la description de l'aide pour :
+- Min-Max range of # of inputs
| +----- Alt. Default # of inputs
| |
V V
1--3 (1 / 2); 1 <--- Possible / Default # of outputs
^
|
Default # of inputs
Comment avez-vous déterminé ce que &
signifie pour chaque fonction?
Très soigneusement. En utilisant l' API StackExchange , nous avons pu télécharger toutes les réponses MATL qui ont déjà été utilisées dans un défi PPCG. En analysant chacune des réponses, nous avons ensuite pu déterminer la fréquence à laquelle chaque spécification d'entrée / sortie était utilisée pour chaque fonction. En utilisant ces informations, nous avons ensuite pu identifier objectivement la spécification d'entrée / sortie que la &
méta-fonction devrait représenter pour chaque fonction. Parfois, il n'y avait pas de gagnant clair, donc de nombreuses fonctions ne sont actuellement pas &
définies.
Voici le script que nous avons utilisé (malheureusement, il est écrit en MATLAB et non MATL).
Et voici un exemple de l'histogramme de $
/ #
usage