Q Tips书(Nick Psaris)展示了下列函数(第10章):
q)merge:`time xdesc upsert
如前所述,它对应于函数组合。我看到了模式:表达式提供了一个函数,该函数同时接受upsert
和then的参数利用其结果喂入time xdesc
。但是语法感觉怪怪的,因为我希望upsert
是xdesc
调用的第二个参数。
旨在简化表达式,我可以看到非常相同的场景适用于:
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