#lang scheme (require "sexpr.ss" (for-syntax "sexpr.ss")) (define (show-differences expr1 expr2) (let-values ([(s1 s2) (get-differences expr1 expr2)]) (pretty-print s1) (pretty-print s2))) (define-syntax (show-differences-syntax stx) (syntax-case stx () [(_ expr1 expr2) (begin (let-values ([(e1 e2) (get-differences (syntax->datum #'expr1) (syntax->datum #'expr2))]) (with-syntax ([(s1 s2) (list e1 e2)]) #'(begin (pretty-print 's1) (pretty-print 's2)))))])) (show-differences 1 2) (newline) (show-differences '(1 2 (4 5)) '(1 3 (6 5))) (newline) (show-differences '(1 2 (4 5)) '(1 3 (6))) (newline) (show-differences-syntax '(1 2 (4 5)) (1 2 (4 5))) (newline) (show-differences-syntax (define-syntax (show-differences-syntax stx) (syntax-case stx () [(_ expr1 expr2) (begin ;; (printf "~a\n" (syntax->datum #'expr2)) (let-values ([(e1 e2) (get-differences (syntax->datum #'expr1) (syntax->datum #'expr2))]) (with-syntax ([(s1 s2) (list e1 e2)]) #'(begin (pretty-print 's1) (pretty-print 's2)))))])) (define-syntax (show-differences-syntax stx) (syntax-case stx () [(_ expr1 expr2) (begin ;; (printf "~a\n" (syntax->datum #'expr2)) (let-values ([(e1 e2) (get-differences (syntax->datum #'expr1) (syntax->datum #'expr2))]) (with-syntax ([(s1 s3) (list e1 e2)]) #'(begin (pretty-print 's1) (pretty-print 's2)))))]))) ;; (pretty-print (make-color '(big tuna)))