函数中的 kdb+/q 索引
kdb+/q indexing in functions
我是 kdb+/q 语言的新手,正在尝试一些基本的在线练习。
我正在尝试创建一个接受列表的函数,returns 列表中的第二项加倍。
L:{[x;y] y:[1]; y*2; x}
我的尝试包括将函数分配给 L
,概述我的参数 x
和 y
,然后我的逻辑是通过索引到value y
并将此值乘以 2。我使用 x
因为我想将列表分配给 x
然后我在函数末尾输出 x
。每次我测试它输入一个列表 L 10 20 30 40 50
时,我都没有看到第二项有任何变化。我需要一些帮助来判断我的语法是否不正确,或者我的逻辑是否正确,或者两者兼而有之。我目前使用 Q for Mortals 作为参考。如果是我的语法错误。 q 中函数的正确语法是什么?
有几种方法可以做到这一点。函数中只需要一个参数就可以获取输入列表。
更新列表中的值和return列表。
q) f:{x[1]*:2;x}
q) f 1 2 3
q) 1 4 3 // output
函数 'f' 有一个参数 'x' 将分配给输入列表。
-
q) f:{@[x;1;*;2]}
q) f 1 2 3
q) 1 4 3 //output
在您的示例中,您将 y
设置为 1 并返回 x
未修改。
您的方法的正确语法是以下之一:
{[x]x[1]:2*x[1];x}
{[x]x[1]*:2;x}
在这种情况下,只需要一个参数。第一个示例没有保存到变量,而是直接更新了第二个元素。第二个例子更简洁,但表达方式大致相同。
另一种可以说更干净的方法是:
{[x]@[x;1;2*]}
将函数 2*
应用于第二个元素。
我是 kdb+/q 语言的新手,正在尝试一些基本的在线练习。
我正在尝试创建一个接受列表的函数,returns 列表中的第二项加倍。
L:{[x;y] y:[1]; y*2; x}
我的尝试包括将函数分配给 L
,概述我的参数 x
和 y
,然后我的逻辑是通过索引到value y
并将此值乘以 2。我使用 x
因为我想将列表分配给 x
然后我在函数末尾输出 x
。每次我测试它输入一个列表 L 10 20 30 40 50
时,我都没有看到第二项有任何变化。我需要一些帮助来判断我的语法是否不正确,或者我的逻辑是否正确,或者两者兼而有之。我目前使用 Q for Mortals 作为参考。如果是我的语法错误。 q 中函数的正确语法是什么?
有几种方法可以做到这一点。函数中只需要一个参数就可以获取输入列表。
更新列表中的值和return列表。
q) f:{x[1]*:2;x} q) f 1 2 3 q) 1 4 3 // output
函数 'f' 有一个参数 'x' 将分配给输入列表。
-
q) f:{@[x;1;*;2]} q) f 1 2 3 q) 1 4 3 //output
在您的示例中,您将 y
设置为 1 并返回 x
未修改。
您的方法的正确语法是以下之一:
{[x]x[1]:2*x[1];x}
{[x]x[1]*:2;x}
在这种情况下,只需要一个参数。第一个示例没有保存到变量,而是直接更新了第二个元素。第二个例子更简洁,但表达方式大致相同。
另一种可以说更干净的方法是:
{[x]@[x;1;2*]}
将函数 2*
应用于第二个元素。