June 7th Thursday (六月 七日 木曜日)

来源:互联网 发布:怎样把网络视频下载 编辑:程序博客网 时间:2024/04/28 08:00

   How to use a fender in "syntax-case" form?  I got a example today.

;; utility for defining ~foo but make it look like #<procedure:foo>
  (define-syntax (define* stx)
    (syntax-case stx ()
      [(_ ~name val) (identifier? #'~name)
       (let* ([~str (symbol->string (syntax-e #'~name))]
              [str  (string->symbol (regexp-replace #rx"^[~*]" ~str ""))])
         (with-syntax ([name (datum->syntax-object #'~name str #'~name)])
           #'(define ~name (let ([name val]) (mark-lazy name)))))]
      [(_ (~name . xs) body ...) (identifier? #'~name)
       #'(define* ~name (lambda xs body ...))]))

  I got other examples.  However, they are wrong and can not be parsed correctly.
According to the above example, I wrote another simple macro.

  (define-syntax m
  (lambda (x)
    (syntax-case x ()
      ((_ ~name) (not (identifier? #'~name))
              #'~name))))

原创粉丝点击