I know, that, unlike Common lisp, Scheme has one common namespace for variables and functions. But does macroses also fall there?
It could be separated by time, in which they exists. But in compilation time, when macroses are all expanses, there surely are some function, like list, or cons, which hence exists both runtime and compile time.
Then could I for example write the following:
(define (add a b) (+ a b))
(let-syntax ((add (lambda (x)
(syntax-case x ()
((_ a ...) (syntax + a ...))))))
(display (add 1 2 3))
(display (reduce-left add 0 '(1 2 3))))
and get 6 6? Or, vice versa, define the macro, and then define the function? And in such expression: (add 1 2) what happen? Will it be a function call, or macro expansion?