我有一个简单的函数,然后将其定义为一个列表并作为列表调用:
f:{x*x}
q)(f; neg)[1; 2]
-2
q)(f; neg)[1; 3]
-3
q)(f; neg)[2; 3]
3
q)(f; neg)[4; 3]
3
对于 (f; neg)[1; 3] - 它返回最右边的 neg (-3),但是当第一个参数变为 > 1 时它不再返回 neg,例如: (f; neg)[2; 3] -> 返回 3
我有一个简单的函数,然后将其定义为一个列表并作为列表调用:
f:{x*x}
q)(f; neg)[1; 2]
-2
q)(f; neg)[1; 3]
-3
q)(f; neg)[2; 3]
3
q)(f; neg)[4; 3]
3
对于 (f; neg)[1; 3] - 它返回最右边的 neg (-3),但是当第一个参数变为 > 1 时它不再返回 neg,例如: (f; neg)[2; 3] -> 返回 3
这种行为是预料之中的。你正在做的是索引函数列表,然后将返回的函数应用于作为第二个参数传递的参数。你可以在这里看到
基本上,[1;3] 中的第一个参数是函数列表中的索引,第二个参数 3 是您要应用的值。现在,为什么它对最后两个示例不起作用。
每当您使用超出范围的索引对列表进行索引时,它都会返回该列表数据类型的相应空元素。
函数列表中的空元素是身份函数,
(::)
它只是按原样返回传递给它的参数希望这能有所帮助。您可以在此处阅读有关身份函数的更多信息https://code.kx.com/q/ref/identity/
并在此处阅读索引https://code.kx.com/q4m3/3_Lists/#34-indexing
第一个参数用于索引函数列表,第二个参数应用于结果: