[ V{ f 3 1 f } ] [ <dlist> 1 over push-front 3 over push-front f over push-front f over push-back dlist>seq ] unit-test
[ V{ } ] [ <dlist> dlist>seq ] unit-test
+
+[ V{ 0 2 4 } ] [ <dlist> { 0 1 2 3 4 } over push-all-back [ even? ] dlist-filter dlist>seq ] unit-test
+[ V{ 2 4 } ] [ <dlist> { 1 2 3 4 } over push-all-back [ even? ] dlist-filter dlist>seq ] unit-test
+[ V{ 2 4 } ] [ <dlist> { 1 2 3 4 5 } over push-all-back [ even? ] dlist-filter dlist>seq ] unit-test
+[ V{ 0 2 4 } ] [ <dlist> { 0 1 2 3 4 5 } over push-all-back [ even? ] dlist-filter dlist>seq ] unit-test
[
[
[ empty-dlist ] unless*
- [ f ] change-next drop
+ next>>
f over set-prev-when
] change-front drop
] keep
[
[
[ empty-dlist ] unless*
- [ f ] change-prev drop
+ prev>>
f over set-next-when
] change-back drop
] keep
: 1dlist ( obj -- dlist ) <dlist> [ push-front ] keep ;
+: dlist-filter ( dlist quot -- dlist )
+ over [ '[ dup obj>> @ [ drop ] [ _ delete-node ] if ] dlist-each-node ] keep ; inline
+
M: dlist clone
<dlist> [ '[ _ push-back ] dlist-each ] keep ;