kdb:在变量列表上调用解析

kdb: calling parse on a list of variables

我从here那里了解到

[...] in a parse tree a variable is represented by a symbol containing its name. Thus to distinguish a symbol or a list of symbols from a variable it is necessary to enlist that expression.

鉴于此,为什么下面的表达式求值为 (enlist;`a;`b) 而不是 `a`b

询问是因为 enlist[`a;`b]~`a`b 似乎是真的。

q)parse"(a;b)"
enlist
`a
`b

我认为您永远不会希望解析树将两个相同类型的值折叠成一个统一列表,这会破坏 eval 解析树的能力,例如

q)a:1
q)b:1
q)
q)eval parse"(a;b)"
1 1
q)eval `a`b
'type
  [0]  eval `a`b
       ^

其次,(enlist;`a;`b)enlist[`a;`b] 不同,但是 (enlist;`a;`b)value 是:

q)value[(enlist;`a;`b)]~enlist[`a;`b]
1b

所以我想这归结为 evalvalue

之间的细微差别