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?

Reply via email to