We have designed an expert system called CHORAL, for harmonizing four-part chorales in the style of J.S. Bach. The system contains over 270 rules, expressed in a form of first order predicate calculus, for representing the knowledge required for harmonizing a given melody. The rules observe the chorale from multiple viewpoints, such as the chord skeleton, individual melodic lines of each voice, and the Schenkerian voice leading within the descant and bass. The program harmonizes chorales using a generate-and-test method with intelligent backtracking. A substantial number of heuristics are used for biasing the search toward musical solutions. Examples of program output are given in the paper. BSL, a new and efficient logic programming language which is fundamentally different from Prolog, was designed to implement the CHORAL system.