(define (wrap-in-p str) (quasiquote (p (unquote str)))) (define (wrap-in-p2 str) (quote (p str))) (define (wip str) `(p ,str)) (define (format-entry-as-html author title collection year) `(p (b ,author) (quote ,title) (i ,collection) (b ,year) ".")) (define (my-gcd x y) (let ((z (modulo x y))) (if (= z 0) y (my-gcd y z)))) (print-struct #t) (define-struct heap-leaf () (make-inspector)) (define-struct heap-node (elt left# right# left right) (make-inspector)) (define (heap-add new-elt heap) (if (heap-leaf? heap) (make-heap-node new-elt 0 0 (make-heap-leaf) (make-heap-leaf)) (let ((old-elt (heap-node-elt heap)) (left# (heap-node-left# heap)) (right# (heap-node-right# heap))) (let ((this (if (> old-elt new-elt) old-elt new-elt)) (next (if (> old-elt new-elt) new-elt old-elt))) (if (> left# right#) (make-heap-node this left# (+ right# 1) (heap-node-left heap) (heap-add next (heap-node-right heap))) (make-heap-node this (+ left# 1) right# (heap-add next (heap-node-left heap)) (heap-node-right heap))))))) (define (heap-empty? heap) (heap-leaf? heap)) (define (heap-pop heap) (if (heap-leaf? heap) (error "heap is empty") (let ((elt (heap-node-elt heap)) (left# (heap-node-left# heap)) (right# (heap-node-right# heap)) (left (heap-node-left heap)) (right (heap-node-right heap))) (cond ((and (= left# 0) (= right# 0)) (cons elt (make-heap-leaf))) ((or (= right# 0) (and (> left# 0) (> (heap-node-elt left) (heap-node-elt right)))) (let ((top-and-heap (heap-pop left))) (cons elt (make-heap-node (car top-and-heap) (- left# 1) right# (cdr top-and-heap) right)))) (else (let ((top-and-heap (heap-pop right))) (cons elt (make-heap-node (car top-and-heap) left# (- right# 1) left (cdr top-and-heap))))))))) (define h0 (make-heap-leaf)) (define h1 (heap-add 53 h0)) (define h2 (heap-add 17 h1)) (define h3 (heap-add 189 h2)) (define h4 (heap-add 7 h3)) (define h5 (heap-add 80 h4)) (define eh6 (heap-pop h5)) (define e1 (car eh6)) (define h6 (cdr eh6)) (define eh7 (heap-pop h6)) (define e2 (car eh7)) (define h7 (cdr eh7)) (define eh8 (heap-pop h7)) (define e3 (car eh8)) (define h8 (cdr eh8))