This paper presents a programming language that includes paradigms that are usually associated with declarative languages, such as sets, rules and search, into an imperative (functional) language. Although these paradigms are separately well-known and available under various programming environments, the originality of the CLAIRE language comes from the tight integration, which yields interesting run-time performances, and from the richness of this combination, which yields new ways to express complex algorithmic patterns with few elegant lines. To achieve the opposite goals of bstraction level (conciseness and readability) and run-time performance (CLAIRE is used as a C++ pre-processor), we have developed two kinds of compiler technology. First, a pattern pre-processor iterations over both concrete and abstract sets (data types and program fragments), in a completely user-extensible manner. Second, an inference compiler transforms a set of logical rules into a set of functions (demons...