2017-09-13 2 views
0

Würde jemand bitte die folgende Funktion erklären? Wie benutzt der kdb hier x?Wie funktioniert diese kbd-Funktion?

Ich habe die ursprüngliche Funktion in "func" geändert. Ich weiß, dass es die in que zugewiesenen Abfragen verwendet, um beide Funktionen abzufragen. Das Problem ist, ich weiß nicht, wie diese x 0 und und x 0 1 hier arbeiten. Ich weiß, 0 ist der Index 1 und 1 ist der Index 2 und x ist der Parameter.

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 

Antwort

3

x wird als "Zwei-Elemente-Liste" jedes Mal, wenn die Funktion aufgerufen wird, übergeben.

Vergessen Sie die func Beschreibung für jetzt und nur in einigen Protokollierung hinzufügen Dinge klarer zu sehen:

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" 

Oder ein individuelles Beispiel:

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 Indizes und ruft sowohl die erstes und zweites Element (Rückgabe

1

Sie haben Recht und x 0 oder x 1 ist das gleiche wie x[0] oder x[1] (siehe den Link unten auf Indexierungslisten), außer vielleicht das Problem ist, dass es nicht offensichtlich ist, was x ist.

Wegen der Adverb each die Funktion vier Mal ausgeführt wird, einmal für jedes Element in svcs cross que

See;

q)count svcs cross que 
4 

Und dann jedes Element in svcs cross que hat zwei Elemente.

q)count each svcs cross que 
2 2 2 2 

So in der ersten Ausführung ist x das erste Element von svcs cross que und so weiter.

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 

Referenz

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

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