Skip to content

Parse trees

A parse tree represents an expression, not immediately evaluated. Its virtue is that the expression can be evaluated whenever and in whatever context it is needed. The two main functions dealing with parse trees are eval, which evaluates a parse tree, and parse, which returns one from a string containing a valid q expression.

Parse trees may be the result of applying parse, or constructed explicitly. The simplest parse tree is a single constant expression. Note that, in a parse tree, a variable is represented by a symbol containing its name. To represent a symbol or a list of symbols, you will need to use enlist on that expression.

q)eval 45
q)eval `x
q)eval enlist `x

Any other parse tree takes a form of a list, of which the first item is a function and the remaining items are its arguments. Any of these items can be parse trees. Parse trees may be arbitrarily deep (up to thousands of layers), so any expression can be represented.

q)eval (til;4)
0 1 2 3
q)eval (/;+)
q)eval ((/;+);(til;(+;2;2)))

Technical Whitepaper: Parse Trees and Functional Forms