Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #lang racket
- (require sicp)
- (define (top r) (r 'top))
- (define (make-ring . l)
- (let ([top-ptr '()] [back-ptr '()])
- (define (insert-back! x)
- (let ([new-ptr (cons (cons x '()) '())])
- (case top-ptr
- ('() (set! top-ptr new-ptr)
- (set! back-ptr new-ptr))
- (else (set-cdr! (car new-ptr) back-ptr)
- (set-cdr! back-ptr new-ptr)
- (set! back-ptr new-ptr)))))
- (define (init! l)
- (if (null? l)
- (begin (set-cdr! back-ptr top-ptr)
- (set-cdr! (car top-ptr) back-ptr))
- (begin (insert-back! (car l))
- (init! (cdr l)))))
- (define (dispatch m . v)
- (case m
- ['top-ptr top-ptr]
- ['back-ptr back-ptr]
- ['top (caar top-ptr)]
- ['rotation-left (rotation-left)]))
- (define (_make-ring t b)
- (let ([top-ptr t] [back-ptr b])
- (define (dispatch m . v)
- (case m
- ['top-ptr top-ptr]
- ['back-ptr back-ptr]
- ['top (caar top-ptr)]
- ['rotation-left (rotation-left)]))
- dispatch))
- (define (rotation-left)
- (_make-ring (cdr top-ptr) back-ptr))
- (init! l)
- dispatch))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement