Common Lisp とは異なり、Scheme には変数と関数に共通の名前空間が 1 つあります。しかし、マクロスもそこに落ちますか?
それは、それらが存在する時間によって分離できます。しかし、コンパイル時に、マクロがすべてエクスパンスである場合、リストやコンスなどの関数が確実に存在するため、実行時とコンパイル時の両方に存在します。
次に、たとえば次のように記述できますか。
(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))))
6 6 を取得しますか? または、逆に、マクロを定義してから関数を定義しますか? そして、そのような表現では: (add 1 2) どうなりますか? それは関数呼び出しですか、それともマクロ展開ですか?