CSCI2041 — Advanced Programming Principles
CSCI 2041 - Advanced Programming Principles CSCI 2041 - Advanced Programming Principles Hours/Week: Lecture 4 Course Description: This course covers the principles and techniques for creating correct, robust, modular programs. Topics include computing with symbolic data, recursion/induction, functional programming, impact of evaluation strategies and parallelism. Additional topics include organizing data/computations around types, search-based programming, concurrency and modularity. Major Content Introduction to functional programming: primitive types and operators, let bindings, lambda expressions, recursion Conditional expressions, pattern matching, iteration and recursion, tuples and lists User-defined data types, product and sum types, inductive types Higher-order functions, currying, closures, polymorphism List-processing functions: map, filter, fold, reduce; relationship between functions Program representation and evaluation. Type checking and type inference. Evaluation strategies: call-by-name, call-by-value, lazy evaluation Evaluation control: exceptions, continuations, delayed evaluation Evaluation of program correctness using natural and structural induction” Types and imperative programming: side effects, references, mutable data structures, and algorithms Modularity and data abstraction mechanisms Optional topics: search, program representation, concurrency, proof techniques Learning
Prerequisites: CSCI1082, CSCI2014