功能应用方法.[0!y;();xcols x]
与xkey
:之间有什么区别
xkey
k){(#x)!.[0!y;();xcols x]}
以及一个简单的函数调用:CCD_ 3。
为什么它是xkey
中首选的函数应用?
关于从k)
上下文内部调用xcols
的第二个问题——它是如何工作的?出于某种原因,我不能做同样的事情:
t:([]a:`a`s`d;b:1 2 3;c:4 5 6)
k).[0!t;();xcols `a`b]
ERROR: 'xcols
(attempt to use variable xcols without defining/assigning first (or user-defined signal))
我认为当通过名称传递表时,函数apply可能是for
t:([]a:`a`s`d;b:1 2 3;c:4 5 6)
.[0!t;();xcols[`a`b]] /this works
`a`b xcols 0!t /equivalent non functional form works
q)`a`b xcols 0!`t /this fails when passing `t
'type
[0] `a`b xcols 0!`t
q).[0!`t;();xcols[`a`b]] /though functional form still works with `t
q)`a`b xkey `t /hence you can use xkey in place
`t
编辑:为了完整起见,在答案中包括我的评论,当在k中时,你应该在q命令前面加上.q来访问它们,因为这是它们在中的名称
q)xcols[`a`b]
k){(x,f@&~(f:cols y)in x)#y}[`a`b]
q)
.q.xcols`a`b
k){(x,f@&~(f:cols y)in x)#y}[`a`b]
编辑2:为了解决您的评论,您的示例的xcols可以归结为
`a`b`c#t
和
`a`b`c#`t
不起作用。我没有太多的解释为什么它不起作用,除了它是如何设计的。函数形式告诉q通过应用take函数来修改表。但是,上面的例子并不是将表重新定义为列的重新排序的公认语法。