AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / coding / 问题 / 79552175
Accepted
Patryk Maryn
Patryk Maryn
Asked: 2025-04-03 14:42:50 +0800 CST2025-04-03 14:42:50 +0800 CST 2025-04-03 14:42:50 +0800 CST

KDB+ q - 函数中以列表形式返回的值背后的逻辑是什么

  • 772

我有一个简单的函数,然后将其定义为一个列表并作为列表调用:

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

kdb+
  • 2 2 个回答
  • 52 Views

2 个回答

  • Voted
  1. Alexander Unterrainer-DefconQ
    2025-04-03T15:12:37+08:002025-04-03T15:12:37+08:00

    这种行为是预料之中的。你正在做的是索引函数列表,然后将返回的函数应用于作为第二个参数传递的参数。你可以在这里看到

    q)f
    {x*x}
    q)(f;neg)[0]
    {x*x}
    q)(f;neg)[1]
    -:
    q)neg
    -:
    

    基本上,[1;3] 中的第一个参数是函数列表中的索引,第二个参数 3 是您要应用的值。现在,为什么它对最后两个示例不起作用。
    每当您使用超出范围的索引对列表进行索引时,它都会返回该列表数据类型的相应空元素。

    q)(1 2 3) 6
    0N
    q)(0101b) 6
    0b
    

    函数列表中的空元素是身份函数,(::)它只是按原样返回传递给它的参数

    q)(neg;min;max;avg)5
    q)(neg;min;max;avg;::)4
    q)(neg;min;max;avg;::)[4;5]
    5
    q)(::)5
    5
    

    希望这能有所帮助。您可以在此处阅读有关身份函数的更多信息https://code.kx.com/q/ref/identity/
    并在此处阅读索引https://code.kx.com/q4m3/3_Lists/#34-indexing

    • 2
  2. Best Answer
    s2ta
    2025-04-03T15:20:39+08:002025-04-03T15:20:39+08:00

    第一个参数用于索引函数列表,第二个参数应用于结果:

    //case 1
    (f; neg)[1; 2]
    
    //find the 1st item in the list (which is -: aka neg)
    q)((f;neg)[1])
    -:
    
    //apply the second input (2) to neg to get -2
    q)((f;neg)[1])@2
    -2
    
    //case 2
    (f; neg)[2; 2]
    
    //find the second item in the list (it doesnt exist, returns identity function [see Alexander's answer])
    q)(f;neg)[2]
    
    //apply 2 to identity (just returns 2)
    q)((f;neg)[2])@2
    2
    
    • 2

相关问题

  • 如何生成随机价格时间序列

  • 解释 KDB 中整数向量/字典的哪些部分适用

  • 如何在 Q/KDB+ 中应用基于 table_2 的每一行修改 table_1 的函数?

  • 获取列表中最后一个值为零的索引

  • 与更新一起使用的矢量化函数调用

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    重新格式化数字,在固定位置插入分隔符

    • 6 个回答
  • Marko Smith

    为什么 C++20 概念会导致循环约束错误,而老式的 SFINAE 不会?

    • 2 个回答
  • Marko Smith

    VScode 自动卸载扩展的问题(Material 主题)

    • 2 个回答
  • Marko Smith

    Vue 3:创建时出错“预期标识符但发现‘导入’”[重复]

    • 1 个回答
  • Marko Smith

    具有指定基础类型但没有枚举器的“枚举类”的用途是什么?

    • 1 个回答
  • Marko Smith

    如何修复未手动导入的模块的 MODULE_NOT_FOUND 错误?

    • 6 个回答
  • Marko Smith

    `(表达式,左值) = 右值` 在 C 或 C++ 中是有效的赋值吗?为什么有些编译器会接受/拒绝它?

    • 3 个回答
  • Marko Smith

    在 C++ 中,一个不执行任何操作的空程序需要 204KB 的堆,但在 C 中则不需要

    • 1 个回答
  • Marko Smith

    PowerBI 目前与 BigQuery 不兼容:Simba 驱动程序与 Windows 更新有关

    • 2 个回答
  • Marko Smith

    AdMob:MobileAds.initialize() - 对于某些设备,“java.lang.Integer 无法转换为 java.lang.String”

    • 1 个回答
  • Martin Hope
    Fantastic Mr Fox msvc std::vector 实现中仅不接受可复制类型 2025-04-23 06:40:49 +0800 CST
  • Martin Hope
    Howard Hinnant 使用 chrono 查找下一个工作日 2025-04-21 08:30:25 +0800 CST
  • Martin Hope
    Fedor 构造函数的成员初始化程序可以包含另一个成员的初始化吗? 2025-04-15 01:01:44 +0800 CST
  • Martin Hope
    Petr Filipský 为什么 C++20 概念会导致循环约束错误,而老式的 SFINAE 不会? 2025-03-23 21:39:40 +0800 CST
  • Martin Hope
    Catskul C++20 是否进行了更改,允许从已知绑定数组“type(&)[N]”转换为未知绑定数组“type(&)[]”? 2025-03-04 06:57:53 +0800 CST
  • Martin Hope
    Stefan Pochmann 为什么 {2,3,10} 和 {x,3,10} (x=2) 的顺序不同? 2025-01-13 23:24:07 +0800 CST
  • Martin Hope
    Chad Feller 在 5.2 版中,bash 条件语句中的 [[ .. ]] 中的分号现在是可选的吗? 2024-10-21 05:50:33 +0800 CST
  • Martin Hope
    Wrench 为什么双破折号 (--) 会导致此 MariaDB 子句评估为 true? 2024-05-05 13:37:20 +0800 CST
  • Martin Hope
    Waket Zheng 为什么 `dict(id=1, **{'id': 2})` 有时会引发 `KeyError: 'id'` 而不是 TypeError? 2024-05-04 14:19:19 +0800 CST
  • Martin Hope
    user924 AdMob:MobileAds.initialize() - 对于某些设备,“java.lang.Integer 无法转换为 java.lang.String” 2024-03-20 03:12:31 +0800 CST

热门标签

python javascript c++ c# java typescript sql reactjs html

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve