Well, the DSL is more a language than a fixed structure. I gave a small sample
code to feel it but you could have code like:
dsl:
algo1:
evaluate:
# Do something with algo1 result
let x = getValue()
algo2:
# Using x to calculate algo2
init(x)
evaluate:
# Getting a new value
let y = getValue()
etc.
Run
That's the reason why `dsl`, `algo1` and `algo2`, `evaluate` are macros in that
example that can be combined by the user. `dsl` is used by the user to start
using the DSL syntax. `algo1` and `algo2` are two keywords of the DSL to do
some operations, and `evaluate` is another keyword to get access to result from
these operations.
Like I said, eventually the solution would be to change the DSL syntax, either
by using dedicated `evaluate1` and `evaluate2`, but in the real DSL I could
have more that 2 `algoN` and having a single keyword for a common action is
more orthogonal. Or do you have a better idea?