Q 语言 - 函数
函数类型
函数可以通过多种方式进行分类。 在这里,我们根据它们采用的参数的数量和类型以及结果类型对它们进行了分类。 函数可以是,
原子 − 其中参数是原子的并产生原子结果
聚合 − 列表中的原子
统一(列表中的列表) − 扩展了原子的概念,因为它们适用于列表。 参数列表的计数等于结果列表的计数。
其他 − 如果该函数不属于上述类别。
数学中的二元运算在 q 中称为二元函数; 例如,"+"。 类似地,一元运算称为一元函数; 例如,"abs"或"floor"。
常用函数
q编程中有很多常用的函数。 在本节中,我们将看到一些常用函数的用法 −
abs
q) abs -9.9 / 绝对值,对 -ve 数求负并留下非 -ve 数 9.9
all
q) all 4 5 0 -4 / 逻辑与(数字最小值),返回最小值 0b
Max (&), Min (|), and Not (!)
q) /And, Or, and Logical Negation q) 1b & 1b / And (Max) 1b q) 1b|0b / Or (Min) 1b q) not 1b /Logical Negate (Not) 0b
asc
q)asc 1 3 5 7 -2 0 4 / Order list ascending, sorted list / in ascending order i s returned `s#-2 0 1 3 4 5 7 q)/attr - 给出数据的属性,描述数据的排序方式。 `s 表示完全排序,`u 表示唯一,`p 和 `g 用于 引用重复的列表,其中"p 代表分开","g 代表分组"
avg
q)avg 3 4 5 6 7 / 返回数值列表的平均值 5f q)/Create on trade table q)trade:([]time:3?(.z.Z-200);sym:3?(`ibm`msft`apple);price:3?99.0;size:3?100)
by
q)/ by - 按给定符号对表中的行进行分组 q)select sum price by sym from trade / 查找每个 sym 的总价 sym | price ------ | -------- apple | 140.2165 ibm | 16.11385
cols
q)cols trade / Lists columns of a table `time`sym`price`size
count
q)count (til 9) / 计算列表,计算列表中的元素并 / return a single int value 9
port
q)\p 9999 / 分配端口号 q)/csv - 此命令允许将浏览器中的查询导出到 通过在查询前加上前缀来执行 excel,例如 http://localhost:9999/.csv?select from trade where sym =`ibm
cut
q)/ cut - 允许在某个点剪切表格或列表 q)(1 3 5) cut "abcdefghijkl" / 参数分为第一个、第三个和第五个字母。 "bc" "de" "fghijkl" q)5 cut "abcdefghijkl" / cut the right arg. Into 5 letters part / until its end. "abcde" "fghij" "kl"
Delete
q)/delete - 从表中删除行/列 q)delete price from trade time sym size --------------------------------------- 2009.06.18T06:04:42.919 apple 36 2009.11.14T12:42:34.653 ibm 12 2009.12.27T17:02:11.518 apple 97
Distinct
q)/distinct - 返回列表的不同元素 q)distinct 1 2 3 2 3 4 5 2 1 3 / 生成唯一的一组数字 1 2 3 4 5
enlist
q)/enlist - Creates one-item list. q)enlist 37 ,37 q)type 37 / -ve type value -7h q)type enlist 37 / +ve type value 7h
Fill (^)
q)/fill - 与空值一起使用。 共有三个函数用于处理空值。 名为 fill 的二元函数用原子左参数替换右参数中的空值。 q)100 ^ 3 4 0N 0N -5 3 4 100 100 -5 q)`Hello^`jack`herry``john` `jack`herry`Hello`john`Hello
Fills
q)/fills - 用之前的非空值填充空值。 q)fills 1 0N 2 0N 0N 2 3 0N -5 0N 1 1 2 2 2 2 3 3 -5 -5
First
q)/first - 返回列表的第一个原子 q)first 1 3 34 5 3 1
Flip
q)/flip - 适用于列表和关联的 Monadic 原语。 它互换了其论证的最上面两个层次。 q)trade time sym price size ------------------------------------------------------ 2009.06.18T06:04:42.919 apple 72.05742 36 2009.11.14T12:42:34.653 ibm 16.11385 12 2009.12.27T17:02:11.518 apple 68.15909 97 q)flip trade time | 2009.06.18T06:04:42.919 2009.11.14T12:42:34.653 2009.12.27T17:02:11.518 sym | apple ibm apple price | 72.05742 16.11385 68.15909 size | 36 12 97
iasc
q)/iasc - 索引升序,返回升序排序列表相对于输入列表的索引。 q)iasc 5 4 0 3 4 9 2 3 1 4 0 5
Idesc
q)/idesc - 索引降序,返回相对于输入列表的降序排序列表 q)idesc 0 1 3 4 3 2 1 0
in
q)/in - 在列表中,二元函数用于查询列表(位于右侧)有关其内容的信息。 q)(2 4) in 1 2 3 10b
insert
q)/insert - Insert语句,将新数据上传到表中。 q)insert[`trade;((.z.Z);`samsung;48.35;99)],3 q)trade time sym price size ------------------------------------------------------ 2009.06.18T06:04:42.919 apple 72.05742 36 2009.11.14T12:42:34.653 ibm 16.11385 12 2009.12.27T17:02:11.518 apple 68.15909 97 2015.04.06T10:03:36.738 samsung 48.35 99
key
q)/key - 三个不同的函数,即生成+ve整数,给出目录的内容或表/字典的键。 q)key 9 0 1 2 3 4 5 6 7 8 q)key `:c: `$RECYCLE.BIN`Config.Msi`Documents and Settings`Drivers`Geojit`hiberfil.sys`I..
lower
q)/lower - 转换为小写并向下取整 q)lower ("JoHn";`HERRY`SYM) "john" `herry`sym
Max and Min (i.e. | and &)
q)/Max and Min / a|b and a&b q)9|7 9 q)9&5 5
null
q)/null - 如果原子为 null,则返回 1b,否则返回参数列表中的 0b q)null 1 3 3 0N 0001b
Peach
q)/peach - 每个并行,允许跨从属进程 q)foo peach list1 / 函数 foo 应用于 list1 中指定的从属设备 'list1 q)foo:{x+27} q)list1:(0 1 2 3 4) q)foo peach list1 / 函数 foo 应用于 list1 中指定的从属设备 27 28 29 30 31
Prev
q)/prev - 返回前一个元素,即将列表向前推 q)prev 0 1 3 4 5 7 0N 0 1 3 4 5
Random( ?)
q)/random - 语法 - n?list,给出整数和浮点数的随机序列 q)9?5 0 0 4 0 3 2 2 0 1 q)3?9.9 0.2426823 1.674133 3.901671
Raze
q)/raze - 展平列表列表,从列表列表中删除索引层。 例如: q)raze (( 12 3 4; 30 0);("hello";7 8); 1 3 4) 12 3 4 30 0 "hello" 7 8 1 3 4
read0
q)/read0 - 读入文本文件 q)read0 `:c:/q/README.txt / 给出 *.txt 文件的内容
read1
q)/read1 - 读入q数据文件 q)read1 `:c:/q/t1 0xff016200630b000500000073796d0074696d6500707269636…
reverse
q)/reverse - 反转列表 q)reverse 2 30 29 1 3 4 4 3 1 29 30 2 q)reverse "HelloWorld" "dlroWolleH"
set
q)/set - 设置变量值 q)`x set 9 `x q)x 9 q)`:c:/q/test12 set trade `:c:/q/test12 q)get `:c:/q/test12 time sym price size --------------------------------------------------------- 2009.06.18T06:04:42.919 apple 72.05742 36 2009.11.14T12:42:34.653 ibm 16.11385 12 2009.12.27T17:02:11.518 apple 68.15909 97 2015.04.06T10:03:36.738 samsung 48.35 99 2015.04.06T10:03:47.540 samsung 48.35 99 2015.04.06T10:04:44.844 samsung 48.35 99
ssr
q)/ssr - 字符串搜索和替换,语法 - ssr["string";searchstring;replaced-with] q)ssr["HelloWorld";"o";"O"] "HellOWOrld"
string
q)/string - 转换为字符串,将所有类型转换为字符串格式。 q)string (1 2 3; `abc;"XYZ";0b) (,"1";,"2";,"3") "abc" (,"X";,"Y";,"Z") ,"0"
SV
q)/sv - 来自向量的标量,根据其参数执行不同的任务。 它评估数字的基本表示形式,这使我们能够计算一个月的秒数或将长度从英尺和英寸转换为厘米。 q)24 60 60 sv 11 30 49 41449 / 11:30:49 一天中经过的秒数
system
q)/system - 允许发送系统命令, q)system "dir *.py" " Volume in drive C is New Volume" " Volume Serial Number is 8CD2-05B2" "" " Directory of C:\Users\myaccount-raj" "" "09/14/2014 06:32 PM 22 hello1.py" " 1 File(s) 22 bytes"
tables
q)/tables - 列出所有表 q)tables ` `s#`tab1`tab2`trade
Til
q)/til - 枚举 q)til 5 0 1 2 3 4
trim
q)/trim - 消除字符串空格 q)trim " John " "John"
vs
q)/vs - 来自标量的向量,从标量产生向量 q)"|" vs "20150204|msft|20.45" "20150204" "msft" "20.45"
xasc
q)/xasc - 按升序排列表,允许对表(右侧参数)进行排序,以便(左侧参数)按升序排列 q)`price xasc trade time sym price size ---------------------------------------------------------- 2009.11.14T12:42:34.653 ibm 16.11385 12 2015.04.06T10:03:36.738 samsung 48.35 99 2015.04.06T10:03:47.540 samsung 48.35 99 2015.04.06T10:04:44.844 samsung 48.35 99 2009.12.27T17:02:11.518 apple 68.15909 97 2009.06.18T06:04:42.919 apple 72.05742 36
xcol
q)/xcol - 重命名表的列 q)`timeNew`symNew xcol trade timeNew symNew price size ------------------------------------------------------------- 2009.06.18T06:04:42.919 apple 72.05742 36 2009.11.14T12:42:34.653 ibm 16.11385 12 2009.12.27T17:02:11.518 apple 68.15909 97 2015.04.06T10:03:36.738 samsung 48.35 99 2015.04.06T10:03:47.540 samsung 48.35 99 2015.04.06T10:04:44.844 samsung 48.35 99
xcols
q)/xcols - 对表的列重新排序, q)`size`price xcols trade size price time sym ----------------------------------------------------------- 36 72.05742 2009.06.18T06:04:42.919 apple 12 16.11385 2009.11.14T12:42:34.653 ibm 97 68.15909 2009.12.27T17:02:11.518 apple 99 48.35 2015.04.06T10:03:36.738 samsung 99 48.35 2015.04.06T10:03:47.540 samsung 99 48.35 2015.04.06T10:04:44.844 samsung
xdesc
q)/xdesc - 对表降序排序,允许对表进行排序,以便左侧参数按降序排列。 q)`price xdesc trade time sym price size ----------------------------------------------------------- 2009.06.18T06:04:42.919 apple 72.05742 36 2009.12.27T17:02:11.518 apple 68.15909 97 2015.04.06T10:03:36.738 samsung 48.35 99 2015.04.06T10:03:47.540 samsung 48.35 99 2015.04.06T10:04:44.844 samsung 48.35 99 2009.11.14T12:42:34.653 ibm 16.11385 12
xgroup
q)/xgroup - 创建嵌套表 q)`x xgroup ([]x:9 18 9 18 27 9 9;y:10 20 10 20 30 40) 'length q)`x xgroup ([]x:9 18 9 18 27 9 9;y:10 20 10 20 30 40 10) x | y ---- | ----------- 9 | 10 10 40 10 18 | 20 20 27 | ,30
xkey
q)/xkey - Set key on table q)`sym xkey trade sym | time price size --------- | ----------------------------------------------- apple | 2009.06.18T06:04:42.919 72.05742 36 ibm | 2009.11.14T12:42:34.653 16.11385 12 apple | 2009.12.27T17:02:11.518 68.15909 97 samsung | 2015.04.06T10:03:36.738 48.35 99 samsung | 2015.04.06T10:03:47.540 48.35 99 samsung | 2015.04.06T10:04:44.844 48.35 99
系统命令
系统命令控制q环境。 它们的形式如下 −
\cmd [p] where p may be optional
下面讨论了一些流行的系统命令 −
\a [ namespace] – 列出给定命名空间中的表
q)/Tables in default namespace q)\a ,`trade q)\a .o / .o 命名空间中的表。 ,`TI
\b – 查看依赖项
q)/ views/dependencies q)a:: x+y / global assingment q)b:: x+1 q)\b `s#`a`b
\B – 待处理的视图/依赖项
q)/ Pending views/dependencies q)a::x+1 / a depends on x q)\B / the dependency is pending ' / the dependency is pending q)\B `s#`a`b q)\b `s#`a`b q)b 29 q)a 29 q)\B `symbol$()
\cd – 更改目录
q)/change directory, \cd [name] q)\cd "C:\Users\myaccount-raj" q)\cd ../new-account q)\cd "C:\Users\new-account"
\d – 设置当前命名空间
q)/ sets current namespace \d [namespace] q)\d /default namespace ' q)\d .o /change to .o q.o)\d `.o q.o)\d . / return to default q)key ` /lists namespaces other than .z `q`Q`h`j`o q)\d .john /change to non-existent namespace q.john)\d `.john q.john)\d . q)\d `.
\l – 从数据库加载文件或目录
q)/ Load file or directory, \l q)\l test2.q / 加载存储在当前路径中的test2.q。 ric | date ex openP closeP MCap ----------- | ------------------------------------------------- JPMORGAN | 2008.05.23 SENSEX 18.30185 17.16319 17876 HSBC | 2002.05.21 NIFTY 2.696749 16.58846 26559 JPMORGAN | 2006.09.07 NIFTY 14.15219 20.05624 14557 HSBC | 2010.10.11 SENSEX 7.394497 25.45859 29366 JPMORGAN | 2007.10.02 SENSEX 1.558085 25.61478 20390 ric | date ex openP closeP MCap ---------- | ------------------------------------------------ INFOSYS | 2003.10.30 DOW 21.2342 7.565652 2375 RELIANCE | 2004.08.12 DOW 12.34132 17.68381 4201 SBIN | 2008.02.14 DOW 1.830857 9.006485 15465 INFOSYS | 2009.06.11 HENSENG 19.47664 12.05208 11143 SBIN | 2010.07.05 DOW 18.55637 10.54082 15873
\p – 端口号
q)/ assign port number, \p q)\p 5001i q)\p 8888 q)\p 8888i
\ - 从 q 控制台退出
\ - exit Exit form q.