This document contains lecture notes for a course on principles of programming languages. It covers topics related to functional programming, including the elements of programming, types, procedures, recursion, higher order functions, syntax, semantics, compound data types, abstraction, lazy evaluation, and evaluators. It also briefly covers logic programming and imperative programming. The notes were prepared by Mira Balaban for a class at Ben-Gurion University of the Negev and thank various individuals who helped in preparing the material.