.Q.trp 和 bt 处理

.Q.trp and bt handling

我(在 .Q.fpn 中)看到了以下技术来解析和显示传递给 .Q.trp 函数的 bt 对象:

q)f:{x+1}
q).Q.trp[f;`a;{'(x;y)}]
'type
  [4]  f:{x+1}
           ^
  [3]  (.Q.trp)

  [2]  .Q.trp[f;`a;{'(x;y)}]
       ^
  [0]  .Q.trp[f;`a;{'(x;y)}]
       ^

'(x;y) 似乎是一个异常构建结构,但 Kx 文档说只有两种异常构建方式:来自符号和来自字符串。看起来我们可以从 (symbol; bt object).

列表中构建异常

那么结构 '(x;y) 代表什么?

我们可以用 '(x;y) 构建不同于异常的东西吗?

我的猜测是,这是最近允许的特定信号以及添加的 .Q.trp/.Q.bt 功能。看起来它只适用于 (symbol;bt object)(string;bt object),其他任何东西都无法识别。

q).Q.trp[{1+x};`a;{'(x;y;1)}]
'stype

如果没有信号返回,可以存储输出:

q)r:.Q.trp[{1+x};`a;{(x;y)}]

而且这种类型的信号似乎在任何情况下都有效,而不仅仅是在 .Q.trp:

q)'("other";last r)
'other
  [2]  {1+x}
         ^
  [1]  (.Q.trp)

  [0]  r:.Q.trp[{1+x};`a;{(x;y)}]

我怀疑 last r 有一个非常具体的 format/shape 可以伪造,但它似乎是一个不必要的用例。

奖金奇数:

这个有效:

q)'("other";())
'other
  [0]  '("other";())
        ^

但我尝试过的其他事情出现了奇怪的错误:

q)'("other";(();()))
pl0
pl0
q)
q)'("other";"abc")
srr