【问题标题】:kdb+/q indexing in functions函数中的 kdb+/q 索引
【发布时间】:2019-10-05 20:35:17
【问题描述】:

我是 kdb+/q 语言的新手,正在尝试一些基本的在线练习。

我正在尝试创建一个接受列表并返回列表中第二项加倍的列表的函数。

L:{[x;y] y:[1]; y*2; x}

我的尝试包括将函数分配给L,概述我的参数xy,然后我的逻辑是通过索引值y 并乘以该值来分配列表中的第二项2.我使用x是因为我想将列表分配给x,然后在函数末尾输出x。每次我测试它输入一个列表L 10 20 30 40 50 我都没有看到第二项的变化。我需要一些关于我的语法是否不正确或我的逻辑是否正确或两者兼而有之的帮助。我目前使用Q for Mortals 作为参考。如果是我的语法错误。 q 中函数的正确语法是什么?

【问题讨论】:

    标签: function kdb


    【解决方案1】:

    在您的示例中,您将 y 设置为 1 并返回 x 未修改。

    您的方法的正确语法是以下之一:

    {[x]x[1]:2*x[1];x}
    {[x]x[1]*:2;x}
    

    在这种情况下,只需要一个参数。第一个示例不是保存到变量,而是直接更新第二个元素。第二个例子更简洁,但表达方式大致相同。

    另一种可以说更清洁的方法是:

    {[x]@[x;1;2*]}
    

    它将函数2*应用于第二个元素。

    【讨论】:

      【解决方案2】:

      有几种方法可以做到这一点。只需函数中的一个参数即可获取输入列表。

      1. 更新列表中的值并返回列表。

        q) f:{x[1]*:2;x}
        q) f 1 2 3
        q) 1 4 3 // output
        

      函数“f”有一个参数“x”,将分配给输入列表。

      1. 使用functional amend ('@')

        q) f:{@[x;1;*;2]}
        q) f 1 2 3
        q) 1 4 3 //output
        

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多