(define iota (lambda (n) (enum-from-to 0 (- n 1)))) (define slots (lambda (s) (list #\{ (intersperse #\| s) #\}))) (define port (lambda (n) (list "<" n ">"))) (define record (lambda (n) (slots (map1 slots n)))) (define attr (lambda (a) (list #\[ (intersperse #\, (map1 (lambda (l) (let ((key (car l)) (value (cadr l))) (list key #\= #\" value #\")) ) a)) #\]))) (define node (lambda (l) (let ((n (car l)) (a (cadr l))) (list n #\space (attr a) #\; #\newline)))) (define edge (lambda (e) (let ((l (car e)) (r (cadr e)) (a (caddr e))) (list l " -> " r #\space (attr a) #\; #\newline)))) (define digraph (lambda (g) (let ((name (car g)) (n (cadr g)) (e (caddr g))) (list 'digraph #\space name #\space #\{ #\newline (map1 node n) (map1 edge e) #\} #\newline))))