kdb+/q語言中?的2種用法展示

lt發表於2016-06-25

這個語言的特點是有很多簡寫,造成了一些多義詞。

//註釋其實只要用1個正斜槓開始,用2個正斜槓是為了便於會其他語言的人識別
q)l1:(1 2 3 4)           //用字面量1,2,3,4構造一個列表,把這個列表賦給名為l1的變數
q)l1                     //直接寫變數名,輸出列表
1 2 3 4
q)l1:1+til 10000         //用til 10000表示式生成從0到9999的列表,覆蓋名為l1的變數
q)l1                     //直接寫變數名,因為列表太大,所以輸出列表的前一部分
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29..
q)l1?100                 //a?b表示在a中查詢b,因此,這句表示在L1中查詢100,找到則輸出索引(第1個索引下標是0)
99
q)l1:1+til 1000000
q)l1?122346
122345
q)l1?1223461             //找不到則輸出一個比最大索引下標大1的值
1000000
q)l1:1+til 10000000      //將l1設為一個1千萬個整數構成的列表
q)\t l1?12345678         //\t表示計時,但不輸出運算結果
46
q)\t l1?1234567
15
q)\t l1?12345678
46
q)\t l1?1234567
15
q)\t l1?1234567+til 20   //可以一次對1個列表查詢另一個列表中的所有元素
78
q)\t l1?1234567+til 100
140
q)\t l1?1234567+til 200
124
q)l1?1234567+til 200     //輸出查詢另一個列表中的所有元素的結果
1234566 1234567 1234568 1234569 1234570 1234571 1234572 1234573 1234574 12345..
q)10?9                   //n?a的用法表示輸出n個不大於a的隨機數,當a是整數,生成隨機整數
8 1 5 4 6 6 1 8 5 4
q)10?9
2 7 0 1 2 1 8 8 1 7
q)lor:100000000?100000000.0  //如果n?a的a是浮點數,則生成隨機的浮點數,這裡生成1億個
q)lor
9.785e+007 7.043314e+007 9.441671e+007 7.833686e+007 4.099561e+007 6.108817e+..
q)\P 15                      //把顯示精度定為15位,預設是7位
q)lor
97850003.7221238 70433142.3155963 94416705.0532997 78336860.2860719 40995610...
q)lor?10                     //在浮點數列表中,無法查詢整數
'type
q)lor?10.0                   //在浮點數列表中,查詢浮點數 
100000000
q)\t lor?10.0                
249
q)\t lor?10.0+til 100        //查詢生成的100個浮點數,溢位了
wsfull 
//但是分別查詢100個浮點數,是可以的
q)\t lor:100000000?100000000.0
1466
q)\P 15
q)lor
41462103.9526537 97258132.9522654 54227256.4023733 61165817.5475895 34149912...
q)\t lor?10.0
265
q)\t do[n:10;n:n-1;lor?10.0+n]
2152
q)\t do[n:100;n:n-1;lor?10.0+n]
22120

相關文章