Common Lisp는 unhygienic macro이어서, symbol 겹침을 방지하려면 gensym을 사용해야 한다. 그런데 매크로 정의도 코드이므로 유연성이 높다. Racket은 기본적으로 hygienic macro인데, 패턴 방식이라 만들기는 쉬운데 유연성은 낮다.defmacro를 제공하기는 한다. Clojure는 Common Lisp 방식인데 auto-gensym이라는 것이 있다. 매크로 정의 안에서 #으로 끝나는 변수는 gensym된 변수가 된다. 미리 let으로 gensym해서 만들어 놓을 필요가 없다. 그런데 auto-gensym은 defmacro 컴파일 시간에 미리 gensym하는 거라서 Common Lisp처럼 매크로 확장시마다 let으로 gensym하는 것과는 의미가 다르다. 참고: ..