# `Feel.Backend.Interpreter.Walk`
[🔗](https://github.com/FeeJai/BDM/blob/feel-v0.1.0/apps/feel/lib/feel/backend/interpreter/walk.ex#L1)

The walk of the nodes that `Feel.Backend.Interpreter` runs, as the text of a module that is made twice:

  * `Feel.Backend.Interpreter.Plain`, the walk of a run (`Feel.Backend.Interpreter.run/3`), which tells nothing of the
    nodes it makes.
  * `Feel.Backend.Interpreter.Monitored`, the walk of a monitored run (`Feel.Backend.Interpreter.run_monitored/4`,
    `Feel.Paranoid`, D-159), which tells a function of the node and its value the value of each node as it is made.

`use Feel.Backend.Interpreter.Walk, monitored: false | true` defines `eval/3`, the evaluation of a node, and what it
needs. The two are one text so that the run without a monitor is the run it was and not a run that asks at each node
whether there is one: the question was a match on a field of `Feel.Runtime.Env` at each of the nodes, which is about
7 ns for each, 3 to 14% of a run of a few operations on names, and the count of reductions does not see it (it is the
same for both). What differs is in `plain/0` and `monitored/0`: `eval/3`, and `logic_operands/5` and `between_high/5`,
which say how an operand that is read under a condition is evaluated.

A new kind of node is a clause of `value_of/3` here, and it is in both walks.

---

*Consult [api-reference.md](api-reference.md) for complete listing*
