2) How are defined procedures in e0?
There's no way, by design. (this is explained in chapter 3 of my
thesis,
near the beginning; that part should be very easy to read.)
In theory you could use buffer:set! from epsilon0 expression to alter a
symbol component, thus building globals and procedures. But this
"surgical" technique of defining global objects would be a masochistic
exercise: for a procedure you'd have to build a list of symbols to
represent the formal parameters, an epsilon0 expression as a data
structure to represent the body, and write those into the correct
fields
of the symbol naming the procedure.
e1:define is a friendly macro which permits you to automatically use
macros and transforms: it builds the corresponding data structures
including the epsilon0 expression from the s-expression you provide,
and
then does that buffer:set! call for you.
5) There is no e0:define procedure? Why?
Because epsilon0 must be as simple as possible, and it doesn't need it.
adding toplevel forms would be overkill because expressions alone are
already powerful enough to modify any part of the global state,
including globals and procedure definitions.