2009-07-11から1日間の記事一覧

symbol-macrolet

symbol-macrolet の挙動をちゃんとわかってないことが判明したので sbcl で調べてみた。 operator は展開しない (defun foo () 'DEFUN) => FOO (symbol-macrolet ((foo 'SYMBOL-MACRO)) (list foo (foo))) => (SYMBOL-MACRO DEFUN) (symbol-macrolet ((foo '…

symbol-macrolet で shadowing しなきゃならん special-form

書いてて気づいたんだけど、単純に除外するんじゃなくて、たとえば (let (foo ...) ...) なら foo は symbol-macro じゃないけど他の bar とかは symbol-macro になるから、bar とかはちゃんと置換しなきゃいけないんだ。うん。で。 関数で lexical scope を…

symbol-macrolet と lexical scope

symbol-macrolet lexically establishes expansion functions for each of the symbol macros named by symbols.symbol-macrolet は、symbols で命名された symbol-macro を展開する機能を、レキシカルに確立します。 CLHS: Special Operator SYMBOL-MACROLE…

symbol-macrolet 内で macrolet したら(sbcl にて)

(symbol-macrolet ((foo (+ 1 2 3))) (macrolet ((foo () `,foo)) (list foo (foo)))) => (6 30) (symbol-macrolet ((foo :symbol-macro)) (macrolet ((foo (foo) `(list ,foo foo))) (foo :local-macro-arg))) => (:LOCAL-MACRO-ARG :SYMBOL-MACRO) ふむ (s…