Can use the relational nature of Prolog to be declarative, e.g.:
desirable_t(blue(_), true).
desirable_t(red(_), false).
desirable_t(white(_), false).
Call that, then you have a Boolean to reason with. And Prolog’s indexing will have taken care of choicepoints - a win-win scenario.