290 likes | 402 Vues
Explore the fundamentals of LISP programming language, covering data structures, list processing, recursion, and symbolic data. Learn about function applications, execution, data representation, and list manipulation techniques. Discover how to access and build lists, manage information representation, and create recursive list constructions. Gain insights into list primitives, conditional expressions, iteration techniques, and working with functional arguments. Dive into the world of functional programming with LISP.
E N D
CSE3302Programming Languages(n-n-n-notes) Summer 2003 Dr. Carter Tiernan Programming Languages
Functional Programming • List Processing - LISP • Complex interrelationships among data • Recursion in conjunction with conditional expressions • Primitive list-handling subroutines • Applicative language Programming Languages
LISP • John McCarthy • Function applications • Prefix (Polish) notation : flexibility • Fully parenthesized : no precedence rules • Symbolic data • Lists of symbols called atoms • List is ONLY data structure in LISP Programming Languages
Lists • S-expressions • Function applications are evaluated • Quoted lists are treated as data • Programs and data represented the same way • Convenient for one program to generate and call for execution of another • Simple to write program manipulators Programming Languages
LISP Execution • Usually interpreted and often interactive • Functions • Pure : compute a value only • eq, plus, difference, etc. • Pseudo : have side effects on computer state • set, defun, etc. Programming Languages
Data Structures • Constructor : list • Primitives : atoms • Numeric (integer and floating point) • Many ops provided: arithmetic, increment, decrement, max, min, relational, predicates • Nonnumeric character strings • Limited ops: comparisons for equality • nil (false, empty set) • null is the test op Programming Languages
Constructor • List • Surrounded by parentheses • Separated by blanks • Zero, one or more elements • Can contain lists • () equivalent to nil; called empty or null list Programming Languages
Accessing Parts of a List • Car • Selects the first element of a list • Cdr • Returns all of a list except its first element • Car and Cdr are selectors • Car and Cdr can be combined to access interior parts of a list: ex. caadr Programming Languages
Building a list • Cons • Creates a list from a first element and a list • Is the inverse of car and cdr • Example: • (car ‘(to be or not)) = to • (cdr ‘(to be or not)) = (be or not) • (cons ‘to ‘(be or not)) = (to be or not) Programming Languages
Info Representation • Property lists • (p1 v1 p2 v2 … pn vn) where pn is the nth property and vn is the value of that property • P-lists give flexibility • Easy to define a function to get properties Programming Languages
Info Representation • Association lists • ((a1 v1) (a2 v2) … (an vn)) • Handles properties which are flags or properties with multiple values Programming Languages
Recursive list construction • Append two lists together • Identify simplest cases • (append ‘() L) = L • (append L ‘()) = L • Reduce other cases to the simplest cases • (append L M) = (cons (car L) (append (cdr L) M) • (defun append (L M) (if (null L)) M (cons (car L) (append (cdr L) M) )) Programming Languages
Atoms • Created by mentioning them • Have properties and relations (p-list) • Print name / pname • putprop adds a property to an atom • apval denotes the binding of an atom to a value • set binds an atom • symbol-plist shows property list of an atom Programming Languages
List representation • Linked list • Cells in the list have a right and a left • Right part points to next cell in list • Left part points to value of the cell • Data and programs both represented the same way • Program linked list called an expression tree Programming Languages
List Primitives • Efficient • Car returns a left part • Cdr returns a right part • Cons requires storage allocation for new cell • Car, Cdr, and Cons do not change values • Sublists can be shared • Pseudo-functions alter lists • rplaca, rplacd • Have same drawbacks as aliasing Programming Languages
Conditional expression • Cond • Mimics mathematical notation • Logical ops are defined in terms of the conditional • And & Or • Operands are evaluated sequentially • Conditional interpretation vs. strict Programming Languages
Iteration • Performed by recursion • Reduction • Perform some op on every element of a list • Uses a binary function to reduce a list to a single value • Mapping • Apply a function to every element of a list • Returns a list of the results • Filtering • Forms a sublist containing all elements that satisfy some property Programming Languages
Functional arguments • Abstracting out pattern • Mapcar • Filter • Reduce • Suppress details • Simplify combination Programming Languages
Recursive Interpreters • Arranged by cases • Atoms • Numeric • Nonnumeric • Quote • Conditional • Functions Programming Languages
Interpreters • Primitive ops performed explicitly • User-defined functions • Evaluate parameters • Bind formals to actuals • Add bindings to environment • Evaluate function in environment Programming Languages
Environment of evaluation • Arguments going to (apply f x a)(p.380) • f the function - lambda expression • x the parameters - bound formals • a the environment - existing environment with the addition of the bound formals • Universal function Programming Languages
Static scoping • Closure to indicate environment of definition - function keyword • Instruction part (ip) - program, lambda expr. • Environment part (ep) - definition environment • (closure ip ep) • User-defined functions can be • Dynamically scoped lambda expressions • Statically scoped function closures Programming Languages
Incompatible scope rules • Options • Adopt uniform static scoping • Use default static scoping but allow “special” dynamic scoping Programming Languages
Storage reclamation • Explicit erasure • Work for programmers • Security problems (dangling pointers) • Automatic reclamation • Reference counts • Garbage collection Programming Languages
Reference counts • Accessible cells are referenced • Reference count keeps track of how many other cells reference the current one • Count must be incremented and decremented correctly • Cells with zero count are added to the free list Programming Languages
Reference counts • Cycles defeat reference counts • Cyclic reference boosts the count of each member plus one member has an outside reference. • If outside reference goes away, cycle still has references internally but no access from anywhere else in program • Allowing cycles is an open issue Programming Languages
Garbage Collection • When storage becomes low, system starts up garbage collection • Mark and sweep process • Starting at roots mark all cells that can be reached recursively moving from each cell to its children • When all are marked, sweep through memory from top, free unmarked cells and reset flags on marked cells Programming Languages
Garbage Collection • Wreaks havoc on execution time • Non uniform and unpredictable • Approaches to more efficiency include • Continuous garbage collection • Parallel Programming Languages
LISP • AI - represent and manipulate complex interrelationships among symbolic data • Suited to ill-specified problems • Easy to manipulate LISP programs in LISP Programming Languages