&
メタ関数(代替入力/出力仕様)
関数に渡す入力引数の数を指定する従来の方法は、$
メタ関数を使用することです
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リリースでメタ関数を導入しました。この&
メタ関数は、関数の特定の入力または出力仕様へのショートカットとして機能します。それが何を意味するのか見てみましょう。
上記の例では、2入力バージョン:
(等間隔の値のベクトルを作成します)を使用します。への入力引数のデフォルト数:
は1
(から配列を作成する[1...N]
)ですが、ユーザーが2番目の入力を必要とする範囲の開始値を指定することは非常に一般的です。そのため:
、&
のショートカットと定義しました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
&
各機能の意味をどのように判断しましたか?
非常に慎重に。使用StackExchangeのAPIを、私たちはこれまでPPCGチャレンジで使用されているすべてのMATLの答えをダウンロードすることができました。各回答を解析することにより、各機能に各入力/出力仕様が使用される頻度を決定することができました。この情報を使用して、&
メタ関数が各関数に対して表す必要がある入力/出力仕様を客観的に識別することができました。明確な勝者がいない場合があるため、現在多くの機能が&
定義されていません。
使用したスクリプトは次のとおりです(残念ながら、MATL ではなく MATLABで作成されています)。
そして、これは$
/ #
使用法のヒストグラムの例です