to possible.bundle make "bundle get.bundle :features if passes? :bundle :filters [op :bundle] [op possible.bundle] end to get.bundle :feats if empty? :feats [op []] op fput word plus.or.minus first :feats get.bundle bf :feats end to plus.or.minus op pickrandom [@ !] end to passes? :bundle :filter.list if empty? :filter.list [op "true] if subset? first :filter.list :bundle [op "false] op passes? :bundle bf :filter.list end to subset? :sub :all if empty? :sub [op "true] if member? first :sub :all [op subset? bf :sub :all] [op "false] end to pickrandom :input op item 1 + random count :input :input end make "features [cons syll son ant cor dist high low back round nasal cont lat del tense voice str] make "filters [[@syll !voice] [@high @low] [@str !cons]] ÿ