eval functions are the heart of our query system. Each of these functions calls
eval on its operand(s) and then applies its own logic: The
OrQuery eval operation returns the union of the results of its two operands;
AndQuery returns the intersection. The
NotQuery is more complicated: It must return the line numbers that are not in its operand’s set.
To support the processing in the
eval functions, we need to use the version of
QueryResult that defines the members we added in the exercises to §12.3.2 (p. 490). We’ll assume that
end members that will let us iterate through the
set of line numbers that the
QueryResult holds. We’ll also assume that
QueryResult has a member named
get_file that ...