RosettaCodeData/Task/Doubly-linked-list-Traversal/Clojure/doubly-linked-list-traversal.clj
Ingy döt Net 764da6cbbb CDE
2013-04-10 16:57:12 -07:00

18 lines
966 B
Clojure

(def dl (double-list [:a :b :c :d]))
;=> #'user/dl
((juxt seq rseq) dl)
;=> [(:a :b :c :d) (:d :c :b :a)]
(take-while identity (iterate get-next (get-head dl)))
;=> (#:double_list.Node{:prev nil, :next #<Object...>, :data :a, :key #<Object...>}
;=> #:double_list.Node{:prev #<Object...>, :next #<Object...>, :data :b, :key #<Object...>}
;=> #:double_list.Node{:prev #<Object...>, :next #<Object...>, :data :c, :key #<Object...>}
;=> #:double_list.Node{:prev #<Object...>, :next nil, :data :d, :key #<Object...>})
(take-while identity (iterate get-prev (get-tail dl)))
;=> (#:double_list.Node{:prev #<Object...>, :next nil, :data :d, :key #<Object...>}
;=> #:double_list.Node{:prev #<Object...>, :next #<Object...>, :data :c, :key #<Object...>}
;=> #:double_list.Node{:prev #<Object...>, :next #<Object...>, :data :b, :key #<Object...>}
;=> #:double_list.Node{:prev nil, :next #<Object...>, :data :a, :key #<Object...>})