: do-until-no-change ( obj quot: ( obj -- obj ) -- obj ) dupd [ call( obj -- obj ) ] keep ! obj1 obj2 quot [ 2dup = not ] dip ! obj1 obj2 ? quot '[ nip _ do-until-no-change ] [ drop ] if ;