hktony

Untitled

Sep 25th, 2016
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.59 KB | None | 0 0
  1. (define-struct node (left right))
  2. (define-struct pair (node updated))
  3.  
  4. (define (read-node a)
  5. (cond
  6. [(equal? (node-left (pair-node a)) (node-right (pair-node a))) (pair-node a)]
  7. [(and (= (pair-updated a) 0) (node? (node-left (pair-node a))) (eq? (node-right (pair-node a)) '())) (make-node (read-node (make-pair (node-left (pair-node a)) (+ (pair-updated a) 1))) (make-node '() '()))]
  8. [(and (= (pair-updated a) 0) (node? (node-right (pair-node a))) (eq? (node-left (pair-node a)) '())) (make-node (make-node '() '()) (read-node (make-pair (node-right (pair-node a)) (+ (pair-updated a) 1))))]
  9. [(and (= (pair-updated a) 0) (node? (node-left (node-left (pair-node a)))) (eq? (node-left (node-right (pair-node a))) '())) (make-node (read-node (make-pair (node-left (pair-node a)) (+ (pair-updated a) 1))) (make-node (make-node '() '()) '()))]
  10. [(and (= (pair-updated a) 0) (node? (node-left (node-right (pair-node a)))) (eq? (node-left (node-left (pair-node a))) '())) (make-node (make-node (make-node '() '()) '()) (read-node (make-pair (node-right (pair-node a)) (+ (pair-updated a) 1))))]
  11. [(node? (pair-node a)) (make-node (read-node (make-pair (node-left (pair-node a)) (pair-updated a))) (read-node (make-pair (node-right (pair-node a)) (pair-updated a))))]
  12. )
  13. )
  14.  
  15. (define a (make-node (make-node '() '()) '()))
  16. (define b (make-node (make-node '() '()) (make-node '() '())))
  17. (define c (make-node (make-node '() '()) (make-node (make-node '() '()) (make-node '() '()))))
  18.  
  19. (define a-pair (make-pair a 0))
  20. (define b-pair (make-pair b 0))
  21. (define c-pair (make-pair c 0))
  22.  
  23.  
  24. (read-node a-pair)
Advertisement
Add Comment
Please, Sign In to add comment