functional evaluate, not running all possibilities