(二元)函数组合语法背后的一般模式是什么?



Q Tips书(Nick Psaris)展示了下列函数(第10章):

q)merge:`time xdesc upsert

如前所述,它对应于函数组合。我看到了模式:表达式提供了一个函数,该函数同时接受upsert和then的参数利用其结果喂入time xdesc。但是语法感觉怪怪的,因为我希望upsertxdesc调用的第二个参数。

旨在简化表达式,我可以看到非常相同的场景适用于:

q)f:1+*
q)f[2;3]
7

如果我们show它的结果,我们可以清楚地看到f的行为是预期的:

q)f
+[1]*

然而,如果我们稍微修改函数,表达式的含义是完全不同:

q)g:+[1;]*
q)g[2;3]
'rank
[0]  g[2;3]
^

实际上,+[1;]作为*操作符的第一个参数传递,导致rank错误:

q)g
*[+[1;]]

我还注意到,当第一个函数是"monadic"

q)h:neg *
q)h[2;3]
'rank
[0]  h[2;3]
^

也在这里:

q)i:neg neg
'type
[0]  i:neg neg
^
在这一点上,我的直觉是,这种模式只适用于我们对组合利用中缀的二元标准(与用户定义的)操作符感兴趣符号。我理解对了吗?这个语法糖实际上更通用吗?是否有完整描述模式的文档?谢谢!

有一些文档说明的方法可以实现您的愿望:

https://code.kx.com/q/ref/apply/组成

您可以使用@

创建一元列车
q)r:neg neg@
q)r 1
1

https://code.kx.com/q/ref/compose/

您可以使用'将一个一元值与另一个秩为>=1的值组成

q)f:('[1+;*])
q)f[2;3]
7

很可能你所看到的行为并没有被q的用户正式利用,所以不应该依赖。您可能对这个链接感兴趣:

https://github.com/quintanar401/DCoQ

相关内容

  • 没有找到相关文章

最新更新