                   dec-length ] }
     } cond ;
 
-: delete-node ( quot dlist -- obj/f )
+: delete-node* ( quot dlist -- obj/f ? )
     tuck dlist-find-node [
-        [ (delete-node) ] keep [ dlist-node-obj ] [ f ] if*
+        [ (delete-node) ] keep [ dlist-node-obj t ] [ f f ] if*
     ] [
-        2drop f
+        2drop f f
     ] if ;
 
-: (dlist-each-node) ( quot dlist -- )
-    over
-    [ 2dup call >r dlist-node-next r> (dlist-each-node) ]
-    [ 2drop ] if ;
-
-: dlist-each-node ( quot dlist -- )
-    >r dlist-front r> (dlist-each-node) ; inline
+: delete-node ( quot dlist -- obj/f )
+    delete-node* drop ;
 
 : dlist-each ( dlist quot -- )
     [ dlist-node-obj ] swap compose dlist-each-node ; inline

: set-front-to-back ( dlist -- )
    dup dlist-front
    [ drop ] [ dup dlist-back swap set-dlist-front ] if ;
PRIVATE>

: push-front ( obj dlist -- )


: pop-back* ( dlist -- ) pop-back drop ;

: dlist-find ( quot dlist -- obj/f ? )
    dlist-find-node dup [ >r dlist-node-obj r> ] when ;

