Advertisement
Guest User

Untitled

a guest
Jul 8th, 2018
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lisp 1.14 KB | None | 0 0
  1. #lang racket
  2.  
  3. (require sicp)
  4.  
  5. (define (top r) (r 'top))
  6.  
  7. (define (make-ring . l)
  8. (let ([top-ptr '()] [back-ptr '()])
  9.  
  10.   (define (insert-back! x)
  11.     (let ([new-ptr (cons (cons x '()) '())])
  12.       (case top-ptr
  13.         ('() (set! top-ptr new-ptr)
  14.              (set! back-ptr new-ptr))
  15.         (else (set-cdr! (car new-ptr) back-ptr)
  16.               (set-cdr! back-ptr new-ptr)
  17.               (set! back-ptr new-ptr)))))
  18.  
  19.   (define (init! l)
  20.     (if (null? l)
  21.         (begin (set-cdr! back-ptr top-ptr)
  22.                (set-cdr! (car top-ptr) back-ptr))
  23.         (begin (insert-back! (car l))
  24.                (init! (cdr l)))))
  25.   (define (dispatch m . v)
  26.    (case m
  27.      ['top-ptr top-ptr]
  28.      ['back-ptr back-ptr]
  29.      ['top (caar top-ptr)]
  30.      ['rotation-left (rotation-left)]))
  31.  
  32.   (define (_make-ring t b)
  33.     (let ([top-ptr t] [back-ptr b])
  34.       (define (dispatch m . v)
  35.    (case m
  36.      ['top-ptr top-ptr]
  37.      ['back-ptr back-ptr]
  38.      ['top (caar top-ptr)]
  39.      ['rotation-left (rotation-left)]))
  40.       dispatch))
  41.  
  42.   (define (rotation-left)
  43.     (_make-ring (cdr top-ptr) back-ptr))
  44.  
  45.   (init! l)
  46.  
  47.  
  48.  
  49.   dispatch))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement