CS 342 Lecture -*- Outline -*- * Analysis of the Functional Paradigm and Scheme ** Scheme and LISP good for representing symbolic data and complex relationships, thus good for AI lack of checking, declarations eases experimental programming ease of writing programming tools (because of syntax) inefficient? interpreters dynamic storage allocation (garbage collection) ** Applicative programming easier to reason about programs (use equational reasoning) potential inefficiencies because must copy instead of update (in general) ** Functional programming higher level abstractions (mapping, reduction) more abstraction than without functionals suppresses details, errors operates on entire data structures at once lack of data dependencies => easier to optimize => easier to find opportunities for parallel execution terse expression of complex algorithms even easier to reason about programs can reason abstractly (not concerned with objects) so can reason at higher level potential inefficiencies (delayed computations) because activation records must be allocated on heap (for closures) need new compilers, architectures to help