Principles of logic and functional programming, explained through programming languages Prolog and Haskell.