Welcome to the CHICKEN Scheme pasting service
hand-woven DLLs added by wasamasa on Fri Jun 10 22:34:15 2016
(define-record dll storage start end) (define-record dll-cell id label prev next) (define items (make-dll '() #f #f)) (define foo (make-dll-cell 1 #f #f #f)) (dll-storage-set! items (cons foo (dll-storage items))) (dll-start-set! items foo) (dll-end-set! items foo) (define bar (make-dll-cell 2 #f #f #f)) (dll-storage-set! items (cons bar (dll-storage items))) (dll-cell-prev-set! bar (dll-end items)) (dll-cell-next-set! (dll-end items) bar) (dll-end-set! items bar) (define baz (make-dll-cell 3 #f #f #f)) (dll-storage-set! items (cons baz (dll-storage items))) (dll-cell-prev-set! baz (dll-end items)) (dll-cell-next-set! (dll-end items) baz) (dll-end-set! items baz) (dll-cell-label-set! foo "Foo") (dll-cell-label-set! bar "Bar") (dll-cell-label-set! baz "Baz") ;; forward (let loop ((item (dll-start items))) (printf "Cell ~a: ~a\n" (dll-cell-id item) (dll-cell-label item)) (when (dll-cell-next item) (loop (dll-cell-next item)))) ;; backward (let loop ((item (dll-end items))) (printf "Cell ~a: ~a\n" (dll-cell-id item) (dll-cell-label item)) (when (dll-cell-prev item) (loop (dll-cell-prev item))))