2

I saw (in .Q.fpn) the following technique to parse and show the bt object passed to .Q.trp function:

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) seems like an exception building construction, - but Kx documentation says that there are only two ways of exception building: from symbol and from string. It is looks like we can built an exception from a list of (symbol; bt object).

So what the construction '(x;y) stands for?

Can we build something different than exception with '(x;y)?

egor7
  • 4,678
  • 7
  • 31
  • 55

1 Answers1

2

My guess is that this is a specific signal recently allowed along with the addition of the .Q.trp/.Q.bt functionality. It looks like it works only for (symbol;bt object) or (string;bt object), anything else is unrecognized.

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

The output can be stored if returned without the signal:

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

and this type of signal seems to work in any context, not just within .Q.trp:

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

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

I suspect the last r has a very specific format/shape that one could fabricate but it seems like an unnecessary use-case.

Bonus oddities:

This works:

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

but other things I've tried show up weird errors:

q)'("other";(();()))
pl0
pl0
q)
q)'("other";"abc")
srr
terrylynch
  • 11,844
  • 13
  • 21
  • 1
    that `srr` error is an odd one. There was a question a few months back with that error and I assumed it was a typo for `ssr` or an undefined variable – Matt Moore Dec 15 '20 at 17:09