2

@ 演算子は、最初のレベルでそのパラメーターによってインデックス付けされた要素を返します。

参考例の最後の行を英語でどのように説明しますか。

q)d:((1 2 3;4 5 6 7);(8 9;10;11 12);(13 14;15 16 17 18;19 20))
q)d@1
(8 9;10;11 12)
q)d@1 2 / selects 2 items at the top level
((8 9;10;11 12);(13 14;15 16 17 18;19 20))

q)@[d;1 1 1;+;3]
((1 2 3;4 5 6 7);(17 18;19;20 21);(13 14;15 16 17 18;19 20))

最後の使用法で返された値がわかりません@

4

2 に答える 2

3

@ロバート・キューブリック

あなたの2番目の質問のために

への呼び出しが@[d;1]インデックス付きの要素のみを@[d;1;+;3]返し、すべてのd要素を返すのはなぜですか?

@[d;1]リストに効果的にインデックスを付けているため、1 のリストのみを返します。d[1](またはd@1)を実行することと同等です。

 q )d:((1 2 3; 4 5 6 7);(8 9; 10 11 12); ( 13 14; 15 16 17 18; 19 20))
 q)d
 (1 2 3;4 5 6 7)
 (8 9;10 11 12)
 (13 14;15 16 17 18;19 20)
q)@[d;1]
 8 9
 10 11 12
q)d@1
8 9
10 11 12
q)d[1]
8 9
10 11 12

一方、実行@[d;1;+;3]するとリスト全体が返されます。これは、1 にインデックスを付けながら 3 を追加する機能的なアプリケーションであるためです。これは、 で行っていることと同等ではありません@[d;1]。これらは 2 つの異なる操作であり、たまたま、@演算子が多くの意味でオーバーロードされています。 (この2つはそのうちの1つです)

于 2013-04-11T18:43:14.620 に答える