こないだのlambda版ifをマクロで書いてみる

(define true (lambda (x y) (x)))
(define false (lambda (x y) (y)))

(define-syntax my-if
  (syntax-rules ()
    ((_ p x y) ((pred-conv p) (lambda () x) (lambda () y)))))

;;真偽値コンバータ(相変わらず汚ない)
(use srfi-13)
(define (pred-conv boolian)
  (eval
   (read-from-string
    (regexp-replace #/#t/
    (regexp-replace #/#f/
                    (x->string boolian)
                    "false")
    "true"))
   (interaction-environment)))

せんせい、まるでおもしろいところがありません!><