>>6
The difference is,
defn functions are always dynamically scoped, it's not optional, because it expands to
def+
fn. It would've been ok if it were optional. It would be ok if it worked just inside the current namespace, but it even breaks namespaces boundaries. I haven't tried, but I'm sure it may even break the namespace's encapsulation by leaking private bindings.
And procedures, again, can't be referentially transparent.
You also miss many optimizations: since you can't assume that a function will always have the same value, you can't inline them, you can't inline references to them, you can't do constant folding for user-defined procedures.
This is also bad because Clojure's lexical variables have the nice property of being immutable, which would enable by default most of those optimizations when Scheme compilers must check for any `set!' on that variable instead, but cannot be done because of the dynamically scoped functions.