考虑以下将列表中的每个元素加 1 的函数。
f : {{x + 1} each x}
f[(1;2;3)]
2 3 4
但是,以下函数不起作用——我假设incr
后一个表达式中的标识符未绑定。
f : {incr : 1; {x + incr} each x}
f[(1;2;3)]
'incr
[3] f@:{x + incr}
我如何在 kdb/q 中表达类似以下内容?
let f lst =
let incr = 1 in
List.map (fun x -> x + incr) lst
incr
在内部函数中不存在。更多详情请参阅https://code.kx.com/q4m3/6_Functions/#63-local-and-global-variables。如果要使用它,需要从外部函数传入。
如果您想要实现的是
2 3 4
- 您可以简单地执行: 。您只需在 kdb 中添加一个列表和一个原子即可。在这种情况下,1 2 3+1
无需使用迭代器( )。each
有关更多详细信息,请参阅https://code.kx.com/q4m3/4_Operators/#403-extension-of-atomic-functions和https://code.kx.com/q/ref/add/。
我还建议在 kdb 中定义变量或函数时不要添加额外的空格
var:val
: