fork download
  1. ; reverse a linked list
  2.  
  3. (define xs '(1 2 3 4 5 6 7))
  4.  
  5. (display (reverse xs)) (newline)
  6. (display xs) (newline)
  7.  
  8. (define (rev xs)
  9. (let loop ((xs xs) (zs (list)))
  10. (if (null? xs) zs
  11. (loop (cdr xs) (cons (car xs) zs)))))
  12.  
  13. (display (rev xs)) (newline)
  14. (display xs) (newline)
  15.  
  16. (define (rev! xs)
  17. (let loop ((prev (list)) (curr xs))
  18. (if (null? curr) prev
  19. (let ((next (cdr curr)))
  20. (set-cdr! curr prev)
  21. (loop curr next)))))
  22.  
  23. (set! xs (rev! xs)) (display xs) (newline)
  24. (set! xs (rev! xs)) (display xs) (newline)
Success #stdin #stdout 0.01s 7904KB
stdin
Standard input is empty
stdout
(7 6 5 4 3 2 1)
(1 2 3 4 5 6 7)
(7 6 5 4 3 2 1)
(1 2 3 4 5 6 7)
(7 6 5 4 3 2 1)
(1 2 3 4 5 6 7)