;; print.stk -- a generic visitor for printing. (require "visitor") (define-method printf args (apply format #t args)) (define-visitor :methods ( (before (printf "(~a" [class-name (class-of host)])) (after (printf ")")) ;; printing a list (before (printf "(")) (after (printf ")")) ;; printing a vector (before (printf "[")) (after (printf "]")) ;; anything else (Terminal classes) (before (printf "~s" host)) )) (define-method before ((visitor ) (s ) (e ) t) (printf " :~a " [label e])) (define-method before ((visitor ) (l ) (e ) target) (unless (eq? (car l) target) ;; don't print anything before the first member of the list (printf " "))) (define-method before ((visitor ) (v ) (e ) target) (unless (eq? (vector-ref v 0) target) ;; don't print anything before the first member of the vector (printf " "))) (provide "print")