RosettaCodeData/Task/Same-Fringe/Racket/same-fringe-3.rkt
2015-11-18 06:14:39 +00:00

15 lines
465 B
Racket

#lang racket
(define (pipe-fringe tree)
(define-values [I O] (make-pipe 100))
(thread (λ() (let loop ([tree tree])
(if (list? tree) (for-each loop tree) (fprintf O "~s\n" tree)))
(close-output-port O)))
I)
(define (same-fringe? tree1 tree2)
(define i1 (pipe-fringe tree1))
(define i2 (pipe-fringe tree2))
(let loop ()
(let ([x1 (read i1)] [x2 (read i2)])
(and (equal? x1 x2) (or (eof-object? x1) (loop))))))