Hi Taylan,

your points are all good and I kind of get the reasoning behind the current
semantics. I'm not trying to start a big discussion here, it's just a
little detail I noticed and that bothered me.

I don't really care what (lambda ()) evaluates to as long as it's
consistent with the rest of the language. But what rubs me the wrong way is
that

    (define x (begin))
    (lambda () x)

is not the same as

    (lambda () (begin))

because one of the strength of functional programming is referential
transparency. Therefore I would expect the definition of x (which has no
side effects) to be substitutable for x itself. This is apparently not the
case as one (begin) has a different meaning than the other because of its
context.

As another data point, this seems to be fine:

    (use-modules (oop goops))
    (define-method (foo))

So, GOOPS doesn't mind empty method bodies. However

    (define-method (foo) (begin))

fails. Not very consistent either, I'm afraid.

Cheers,
Tobias

Reply via email to