fork download
  1. ; minstack
  2.  
  3. (define empty (list))
  4. (define empty? null?)
  5. (define (push x minstack)
  6. (if (empty? minstack) (cons (cons x x) minstack)
  7. (cons (cons x (min x (least minstack))) minstack)))
  8. (define pop cdr)
  9. (define top caar)
  10. (define least cdar)
  11.  
  12. (define ms empty)
  13. (set! ms (push 4 ms))
  14. (set! ms (push 3 ms))
  15. (set! ms (push 7 ms))
  16. (display ms) (newline)
  17. (display (top ms)) (newline)
  18. (display (least ms)) (newline)
  19. (set! ms (pop ms))
  20. (display (top ms)) (newline)
  21. (display (least ms)) (newline)
  22. (set! ms (pop ms))
  23. (display (empty? ms)) (newline)
  24. (display (top ms)) (newline)
  25. (display (least ms)) (newline)
  26. (set! ms (pop ms))
  27. (display (empty? ms)) (newline)
Success #stdin #stdout 0s 7900KB
stdin
Standard input is empty
stdout
((7 . 3) (3 . 3) (4 . 4))
7
3
3
3
#f
4
4
#t