tasks a-s

This commit is contained in:
Ingy döt Net 2013-04-10 23:57:08 -07:00
parent 47bf37c096
commit b83f433714
12433 changed files with 156208 additions and 123 deletions

View file

@ -0,0 +1,30 @@
#lang racket
(require racket/control)
(define (make-fringe-getter tree)
(λ ()
(let loop ([tree tree])
(match tree
[(cons a d) (loop a)
(loop d)]
['() (void)]
[else (fcontrol tree)]))
(fcontrol 'done)))
(define (same-fringe? tree1 tree2)
(let loop ([get-fringe1 (make-fringe-getter tree1)]
[get-fringe2 (make-fringe-getter tree2)])
(% (get-fringe1)
(λ (fringe1 get-fringe1)
(% (get-fringe2)
(λ (fringe2 get-fringe2)
(and (equal? fringe1 fringe2)
(or (eq? fringe1 'done)
(loop get-fringe1 get-fringe2)))))))))
;; unit tests
(require rackunit)
(check-true (same-fringe? '((1 2 3) ((4 5 6) (7 8)))
'(((1 2 3) (4 5 6)) (7 8))))
(check-false (same-fringe? '((1 2 3) ((4 5 6) (7 8)))
'(((1 2 3) (4 6)) (8))))