2017-09-13 85 views
0

有人請解釋下面的功能嗎? kdb如何在這裏使用x?這個kbd函數是如何工作的?

我將原始函數改爲「func」我知道它使用在que中分配的查詢來查詢這兩個函數。問題是我不知道這些x 0和x 0 1如何在這裏工作。我知道0是索引1,1是索引2,x是參數。

svcs:`TEST:1`TEST:2 
que: (`$"select count sym from trades";`$"select sum size from trades") 

{func[x 0;string x 1],x 0 1}each svcs cross que 

回答

3

x被作爲兩個元素列表傳入「每個」時間函數被調用。

忘掉FUNC說明現在,只是在一些記錄添加到看東西更清楚:

q)svcs cross que 
TEST:1 select count sym from trades 
TEST:1 select sum size from trades 
TEST:2 select count sym from trades 
TEST:2 select sum size from trades 
q){show enlist "x 0 is ",string x 0;show enlist "x 1 is ",string x 1;show raze " 
x 0 1 is ",(string x 0)," & ", (string x 1)}each svcs cross que; 
"x 0 is TEST:1" 
"x 1 is select count sym from trades" 
"x 0 1 is TEST:1 & select count sym from trades" 
"x 0 is TEST:1" 
"x 1 is select sum size from trades" 
"x 0 1 is TEST:1 & select sum size from trades" 
"x 0 is TEST:2" 
"x 1 is select count sym from trades" 
"x 0 1 is TEST:2 & select count sym from trades" 
"x 0 is TEST:2" 
"x 1 is select sum size from trades" 
"x 0 1 is TEST:2 & select sum size from trades" 

或個人例如:

q)x:(`TEST:1;`$"select count sym from trades") 
q)x 0 
`TEST:1 
q)x 1 
`select count sym from trades 
q)x 0 1 
`TEST:1`select count sym from trades 

X 0 1索引和檢索兩種第一個和第二個元素(返回

1

你是對的,x 0x 1x[0]或相同(請參閱下面的索引列表鏈接),除了可能的問題是它不是什麼明顯的x是。由於副詞each的功能在svcs cross que

執行次,一次爲每個項目

見;

q)count svcs cross que 
4 

然後在svcs cross que每個項目有兩個項目。

q)count each svcs cross que 
2 2 2 2 

所以在第一次執行,xsvcs cross que等等的第一個項目。

q)first svcs cross que 
`TEST:1`select count sym from trades 
q)(first svcs cross que) 0 
`TEST:1 
q)(first svcs cross que) 1 
`select count sym from trades 
q)(first svcs cross que) 0 1 
`TEST:1`select count sym from trades 

參考

http://code.kx.com/q4m3/6_Functions/#671-monadic-each

http://code.kx.com/q4m3/3_Lists/#34-indexing