是否可以在 q 脚本中编写 k 代码?
Is it possible to write k code within q script?
我尝试从 q 函数调用 k 的计数函数,但出现错误。
{
"k)"# 1 2 3 4 5 //~ count 1 2 3 4 5
}[]
所以,我有以下问题:
1.q脚本里面可以写k代码吗?
2、如果是,那么q脚本中怎么写k代码呢?在 q script/function 中使用 k 代码是否使 script/function 更高效和优化?
- 是的,这是可能的。我想你要找的是
{
(#:) 1 2 3 4 5
}[]
这将对列表进行计数
- 在速度方面,对于像count这样的函数,影响似乎可以忽略不计。
q)\t:100000 {(#:) 1 2 3 4 5}[]
29
q)\t:100000 {count 1 2 3 4 5}[]
25
希望这能回答您的问题
可以。一种方法是在 k:
中定义整个函数
q)k)f:{# 1 2 3}
q)f
k){# 1 2 3}
q)f[]
3
除了 Eoins 和 pamphlets 方法,还可以将字符串执行为 k 代码:
q){a:"k" "|1 2 3";a}[]
3 2 1
q)
q){b:("k" "#:")1 2 3;b}[]
3
然而,将代码编写为 k 代码实际上没有任何优势 - 最好坚持使用 q
A k
函数可以通过 Terry 布局的方法在 lambda 中定义,或者通常通过 value
调用定义,就像这样
q)mins
&\
q)foo:{[x] value "k)minner:&\";minner x}
q)foo 1 2 3
1 1 1
事实上,您可以轻松地创建一个简洁的小函数来创建 k
函数
q)makeK:{[x;y]value "k)",string[x],"::",string[y]}
q)makeK[`minfoo;&\]
q)minfoo
&\
q)minfoo 1 2 3
1 1 1
Eoins answer 是一种调用原语 k
功能的更简洁的方法。通常,用括号包裹原语将调用 k
功能
q)dict:`a`b`c!(1 2 3;1 2 3;1 2 3)
q)flip dict
a b c
-----
1 1 1
2 2 2
3 3 3
q)(+:) dict
a b c
-----
1 1 1
2 2 2
3 3 3
q)(+:)~flip
1b
我尝试从 q 函数调用 k 的计数函数,但出现错误。
{
"k)"# 1 2 3 4 5 //~ count 1 2 3 4 5
}[]
所以,我有以下问题:
1.q脚本里面可以写k代码吗?
2、如果是,那么q脚本中怎么写k代码呢?在 q script/function 中使用 k 代码是否使 script/function 更高效和优化?
- 是的,这是可能的。我想你要找的是
{
(#:) 1 2 3 4 5
}[]
这将对列表进行计数
- 在速度方面,对于像count这样的函数,影响似乎可以忽略不计。
q)\t:100000 {(#:) 1 2 3 4 5}[]
29
q)\t:100000 {count 1 2 3 4 5}[]
25
希望这能回答您的问题
可以。一种方法是在 k:
中定义整个函数q)k)f:{# 1 2 3}
q)f
k){# 1 2 3}
q)f[]
3
除了 Eoins 和 pamphlets 方法,还可以将字符串执行为 k 代码:
q){a:"k" "|1 2 3";a}[]
3 2 1
q)
q){b:("k" "#:")1 2 3;b}[]
3
然而,将代码编写为 k 代码实际上没有任何优势 - 最好坚持使用 q
A k
函数可以通过 Terry 布局的方法在 lambda 中定义,或者通常通过 value
调用定义,就像这样
q)mins
&\
q)foo:{[x] value "k)minner:&\";minner x}
q)foo 1 2 3
1 1 1
事实上,您可以轻松地创建一个简洁的小函数来创建 k
函数
q)makeK:{[x;y]value "k)",string[x],"::",string[y]}
q)makeK[`minfoo;&\]
q)minfoo
&\
q)minfoo 1 2 3
1 1 1
Eoins answer 是一种调用原语 k
功能的更简洁的方法。通常,用括号包裹原语将调用 k
功能
q)dict:`a`b`c!(1 2 3;1 2 3;1 2 3)
q)flip dict
a b c
-----
1 1 1
2 2 2
3 3 3
q)(+:) dict
a b c
-----
1 1 1
2 2 2
3 3 3
q)(+:)~flip
1b