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
所以我想这归结为 eval
和 value
之间的细微差别
我从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
所以我想这归结为 eval
和 value