USING: kernel sequences splitting ; : remove-.. ( seq -- newseq ) dup empty? [ unclip dup ".." = [ drop dup empty? [ drop { ".." } ] [ rest remove-.. ] if ] [ [ remove-.. ] dip prefix ] if ] unless ; : simplify ( path -- newpath ) "/" split reverse remove-.. reverse "/" join ;