そういえばOnLispに!ってマクロありましたね。
schemeだとfuncallが要らなくなるので綺麗になると書かれていたけれど…使い道が思いつかない。
(define-module onlisp-macros (use srfi-1) ;filter (module-exports !)) (select-module onlisp-macros) (define *!-table* (make-hash-table)) (define-macro (! fun) (hash-table-get *!-table* fun)) (let ((src (apply append (map module-exports (all-modules)))) (env (interaction-environment))) (for-each (lambda (x) (let1 x* (string->symbol (regexp-replace #/!$/ (symbol->string x) "")) (hash-table-put! *!-table* x* (eval x env)))) (filter (lambda (x) (#/!$/ (symbol->string x))) src))) ;; (define xs (iota 10)) ;; ((! span) even? xs) ;; xs ; => (0)