: walk ( stack point -- stack' ) { [ clone [ 1 + ] change-x over push ] [ clone [ 1 - ] change-x over push ] [ clone [ 1 + ] change-y over push ] [ clone [ 1 - ] change-y over push ] } cleave ; : ?walk ( total stack point -- total stack ) dup walkable? [ walk [ 1 + ] dip ] [ drop ] if ; : until-empty ( seq quot -- ) [ dup empty? ] swap until drop ; inline : ?adjoin ( elt set -- elt/f ) 2dup in? [ 2drop f ] [ dupd adjoin ] if ; : (ant) ( total stack seen -- total' ) '[ dup pop _ ?adjoin [ ?walk ] when* ] until-empty ; : ant-no-locals ( -- total ) 0 1000 1000 1vector HS{ } clone (ant) ;