USING: accessors kernel math slots.syntax ; QUALIFIED-WITH: binary-tree bst IN: limited-list TUPLE: limited-list btree { limit integer } { count integer initial: 0 } ; : empty? ( limited-list -- ? ) btree>> >boolean not ; ! has binary-tree? : vacancy? ( limited-list -- ? ) slots[ count limit ] < ; : inc ( limited-list -- limited-list' ) [ 1 + ] change-count ; GENERIC: belongs? ( node limited-list -- ? ) GENERIC: update ( limited-list -- ) ! possible additions ! -------------- DEFER: update : add-first-node ( node limited-list -- ) inc swap bst: >>btree update ; : regular-add ( node limited-list -- ) inc btree>> bst:add-node ; : limited-add ( node limited-list -- ) regular-add update ; ! -------------- : add-node ( node limited-list -- ) dup empty? [ add-first-node ] [ dup vacancy? [ regular-add ] [ ! limit reached: dont add if value >= max. 2dup belongs? [ limited-add ] [ 2drop ] if ] if ] if ; : add ( value limited-list -- ) [ bst: ] dip add-node ;