function rank_results(query, candidates):
   scored = [(combine(lexical_score(query, doc), semantic_score(query, doc)), doc)

         for doc in candidates]
   scored.sort_by(score, descending=true)
   return [doc for score, doc in scored]
