Welcome to the CHICKEN Scheme pasting service

Mindfuck 'o clock pasted by sjamaan on Sat Dec 14 18:04:41 2013

;; Broken version
(let-syntax
    ((foo (syntax-rules ()
            ((_)
             (letrec-syntax
                 ((bar (er-macro-transformer
                        (lambda (e r c)
                          (if (= (cadr e) 0)
                              0
                              `(,(r '+) 1 (,(r 'bar) ,(- (cadr e) 1))))))))
               (bar 5))))))
  (foo))

;; Correct version
(let-syntax
    ((foo (syntax-rules ()
            ((_)
             (letrec-syntax
                 ((bar (er-macro-transformer
                        (lambda (e r c)
                          (if (= (caddr e) 0)
                              0
                              `(,(r '+) 1 (,(cadr e) ,(cadr e)
                                           ,(- (caddr e) 1))))))))
               (bar bar 5))))))
  (foo))

The same, as macro-rules and a similar one as syntax-rules added by sjamaan on Sat Dec 14 18:13:24 2013

(let-syntax ((foo (syntax-rules ()
                    ((_)
                     (letrec-syntax
                         ((bar (macro-rules ()
                                 ((_ recur x) (where (= x 0)) 0)
                                 ((_ recur x) `(+ 1 (,recur ,recur ,(- x 1)))))))
                       (bar bar 5))))))
  (foo))

;; Much more fun: no need to pass the macro its own name
(let-syntax ((foo (syntax-rules ()
                    ((_)
                     (letrec-syntax
                         ((bar (syntax-rules .. ()
                                 ((_) 0)
                                 ((_ x rest ..) (+ 1 (bar rest ..))))))
                       (bar 1 2 3 4 5))))))
  (foo))

Your annotation:

Enter a new annotation:

Your nick:
The title of your paste:
Your paste (mandatory) :
Which module provides `load-relative'?
Visually impaired? Let me spell it for you (wav file) download WAV