Functions Robin Burke CSC 358/458 4.10.2006. Outline Errata Homework #2 Project Structures Functions...

39
Functions Robin Burke CSC 358/458 4.10.2006

Transcript of Functions Robin Burke CSC 358/458 4.10.2006. Outline Errata Homework #2 Project Structures Functions...

Page 1: Functions Robin Burke CSC 358/458 4.10.2006. Outline Errata Homework #2 Project Structures Functions review parameter lists anonymous fns closures recursion.

Functions

Robin Burke

CSC 358/458

4.10.2006

Page 2: Functions Robin Burke CSC 358/458 4.10.2006. Outline Errata Homework #2 Project Structures Functions review parameter lists anonymous fns closures recursion.

Outline

Errata Homework #2 Project Structures Functions

review parameter lists anonymous fns closures recursion tail recursion

Example

Page 3: Functions Robin Burke CSC 358/458 4.10.2006. Outline Errata Homework #2 Project Structures Functions review parameter lists anonymous fns closures recursion.

CLOS solution

How many?

Page 4: Functions Robin Burke CSC 358/458 4.10.2006. Outline Errata Homework #2 Project Structures Functions review parameter lists anonymous fns closures recursion.

Errata

appenddoes consit build a new list for the front partshares structure with the last part

Page 5: Functions Robin Burke CSC 358/458 4.10.2006. Outline Errata Homework #2 Project Structures Functions review parameter lists anonymous fns closures recursion.

Homework #2

Page 6: Functions Robin Burke CSC 358/458 4.10.2006. Outline Errata Homework #2 Project Structures Functions review parameter lists anonymous fns closures recursion.

Project

Develop your own Lisp application Not restricted to implementing a game Timeline

4/17 Proposal5/1 Accepted proposal5/22 Progress report6/7 Due

Page 7: Functions Robin Burke CSC 358/458 4.10.2006. Outline Errata Homework #2 Project Structures Functions review parameter lists anonymous fns closures recursion.

Structures

Annoying to define a pile of accessors Alternative

defstruct Defines a structure

a named typewith slots

Page 8: Functions Robin Burke CSC 358/458 4.10.2006. Outline Errata Homework #2 Project Structures Functions review parameter lists anonymous fns closures recursion.

defstruct

Definesaccessorsmutatorsconstructorread macro

Page 9: Functions Robin Burke CSC 358/458 4.10.2006. Outline Errata Homework #2 Project Structures Functions review parameter lists anonymous fns closures recursion.

Example

(defstruct card suit rank) Defines

make-cardcard-suitcard-rankalso#S(CARD :SUIT S :RANK 1)

• will be read and turned into a card object

Page 10: Functions Robin Burke CSC 358/458 4.10.2006. Outline Errata Homework #2 Project Structures Functions review parameter lists anonymous fns closures recursion.

Functions

Defined with defun, butjust a convenience

Real issuesymbol-function binding

Page 11: Functions Robin Burke CSC 358/458 4.10.2006. Outline Errata Homework #2 Project Structures Functions review parameter lists anonymous fns closures recursion.

Calling Functions

Normal evaluation(+ 1 2 3)

Othersfuncallapplyavoid eval

Page 12: Functions Robin Burke CSC 358/458 4.10.2006. Outline Errata Homework #2 Project Structures Functions review parameter lists anonymous fns closures recursion.

Multiple values

Let equivalentmultiple-value-bind

setq equivalentmultiple-value-setq

Example(multiple-value-bind (div rem) (floor num 10)... rest of code ...)

Alsomultiple-value-list

Page 13: Functions Robin Burke CSC 358/458 4.10.2006. Outline Errata Homework #2 Project Structures Functions review parameter lists anonymous fns closures recursion.

Example

add-digits

Page 14: Functions Robin Burke CSC 358/458 4.10.2006. Outline Errata Homework #2 Project Structures Functions review parameter lists anonymous fns closures recursion.

Parameter Lists

keywords(defun foo (a &key b c) ... )(foo 5 :b 10 :c 19)(foo 5)

rest(defun foo (&rest lst) ... )(foo)(foo 10 15 25 30)

optional(defun foo (a &optional b c) ... )(foo 5)(foo 5 10 19)

Page 15: Functions Robin Burke CSC 358/458 4.10.2006. Outline Errata Homework #2 Project Structures Functions review parameter lists anonymous fns closures recursion.

Anonymous Functions

Like anonymous classes in Java but...

lambda a macro that creates function objects(lambda (x) (* x x)

Can create functions where needed useful as functional arguments(mapcar #'(lambda (x) (* x x)) '(1 2 3))

Can write functions to return functional values

Page 16: Functions Robin Burke CSC 358/458 4.10.2006. Outline Errata Homework #2 Project Structures Functions review parameter lists anonymous fns closures recursion.

Example

numeric series

Page 17: Functions Robin Burke CSC 358/458 4.10.2006. Outline Errata Homework #2 Project Structures Functions review parameter lists anonymous fns closures recursion.

Closures

Shared lexical variable(defun integers ()

(let ((n 0))

(values #'(lambda () (incf n))

#'(lambda () (setf n 0)))))

Closurebinds variables in external scopekeeps them when the scope

disappears

Page 18: Functions Robin Burke CSC 358/458 4.10.2006. Outline Errata Homework #2 Project Structures Functions review parameter lists anonymous fns closures recursion.

Environment

Evaluation takes place in an environmentbindings for symbols

Hierarchy of environmentsglobal environmentlocal environments

"Lexical context"

Page 19: Functions Robin Burke CSC 358/458 4.10.2006. Outline Errata Homework #2 Project Structures Functions review parameter lists anonymous fns closures recursion.

Example

(defun bar (arg1 arg2)

(let ((var1 (baz arg1 arg2)))

#'(lambda () (foo var1))))

(setf fn (bar 'a 'b))

Page 20: Functions Robin Burke CSC 358/458 4.10.2006. Outline Errata Homework #2 Project Structures Functions review parameter lists anonymous fns closures recursion.

When Closure is Created

Globalenvironment

Function

defun ...defparameter ...

(arg1 arg2)

Let (let ((var1...

Lambda(lambda () (foo var1 ...)

Page 21: Functions Robin Burke CSC 358/458 4.10.2006. Outline Errata Homework #2 Project Structures Functions review parameter lists anonymous fns closures recursion.

When Closure is Returned

Let (let ((var1...

Lambda(lambda () (foo var1 ...)

Globalenvironment

fn

Page 22: Functions Robin Burke CSC 358/458 4.10.2006. Outline Errata Homework #2 Project Structures Functions review parameter lists anonymous fns closures recursion.

Encapsulation

Achieves OO goalvariables in closure are totally

inaccessibleno way to refer to their bindingsno way to even access that

environment

Page 23: Functions Robin Burke CSC 358/458 4.10.2006. Outline Errata Homework #2 Project Structures Functions review parameter lists anonymous fns closures recursion.

Example

Bank account

Page 24: Functions Robin Burke CSC 358/458 4.10.2006. Outline Errata Homework #2 Project Structures Functions review parameter lists anonymous fns closures recursion.

Compare with Java

Anonymous classes External values only if

instance variablesfinal variables

Page 25: Functions Robin Burke CSC 358/458 4.10.2006. Outline Errata Homework #2 Project Structures Functions review parameter lists anonymous fns closures recursion.

Anonymous Class (illegal)

JButton okButton = new JButton ("OK"); okButton.addActionListener ( new ActionListener () { public void actionPerformed (ActionEvent e) { m_canceled = false; okButton.setEnabled(false); } });

Page 26: Functions Robin Burke CSC 358/458 4.10.2006. Outline Errata Homework #2 Project Structures Functions review parameter lists anonymous fns closures recursion.

Anonymous Class (legal)

final JButton okButton = new JButton ("OK"); okButton.addActionListener ( new ActionListener () { public void actionPerformed (ActionEvent e) { m_canceled = false; okButton.setEnabled(false); } });

// BUT okButton = new JButton ("Yep"); // Illegal

Page 27: Functions Robin Burke CSC 358/458 4.10.2006. Outline Errata Homework #2 Project Structures Functions review parameter lists anonymous fns closures recursion.

Simulating a Closure in Java

final JButton [] arOkButton = new JButton [1];arOkButton[0] = new JButton ("OK");arOkButton[0].addActionListener ( new ActionListener () { public void actionPerformed (ActionEvent e) { m_canceled = false; arOkButton[0].setEnabled(false); } });

arOkButton[0] = new JButton ("Yep"); // Legal

Page 28: Functions Robin Burke CSC 358/458 4.10.2006. Outline Errata Homework #2 Project Structures Functions review parameter lists anonymous fns closures recursion.

Recursion

Basic frameworksolve simplest problem "base case"solve one piececombine with the solution to smaller

problem Why it works

eventually some call = base casethen all partial solutions are combined

Page 29: Functions Robin Burke CSC 358/458 4.10.2006. Outline Errata Homework #2 Project Structures Functions review parameter lists anonymous fns closures recursion.

Recursive Statement

Some problems have a natural recursive statementmaze followingpattern matching

Page 30: Functions Robin Burke CSC 358/458 4.10.2006. Outline Errata Homework #2 Project Structures Functions review parameter lists anonymous fns closures recursion.

Example

pattern matching

Page 31: Functions Robin Burke CSC 358/458 4.10.2006. Outline Errata Homework #2 Project Structures Functions review parameter lists anonymous fns closures recursion.

Double Recursion

Treesoperating on the "current" element

isn't simplerecurse on both car and cdr

Strategybase casecombine solution-to-car with solution-

to-cdr

Page 32: Functions Robin Burke CSC 358/458 4.10.2006. Outline Errata Homework #2 Project Structures Functions review parameter lists anonymous fns closures recursion.

Example

count-leaves

Page 33: Functions Robin Burke CSC 358/458 4.10.2006. Outline Errata Homework #2 Project Structures Functions review parameter lists anonymous fns closures recursion.

Recursive Stack

(defun factorial (n)

(if (= 0 n) 1 (* n (factorial (1- n)))

n = 5

n = 4

n = 3

n = 2

n = 1

n = 0 1

(* 1 1)

(* 2 1)

(* 3 2)

(* 4 6)

(* 5 24)

120

Page 34: Functions Robin Burke CSC 358/458 4.10.2006. Outline Errata Homework #2 Project Structures Functions review parameter lists anonymous fns closures recursion.

Tail Recursion

Avoid revisiting previous context = no after-the-fact assembly

New formulation accumulate answer in parameter base case = return answer recursive step

• do partial solution and pass as answer parameter Effect

do need to revist context recursive call = GOTO!

Page 35: Functions Robin Burke CSC 358/458 4.10.2006. Outline Errata Homework #2 Project Structures Functions review parameter lists anonymous fns closures recursion.

Tail Recursive Factorial

(defun factorial (n) (factorial-1 n 1))

(defun factorial-1 (n ans)

(if (= 0 n) ans (factorial-1 (1- n) (* n ans))))

n = 5, ans = 1

n = 4, ans = 5

n = 3, ans = 20

n = 2, ans = 60

n = 1, ans = 120

n = 0, ans = 120 120

120

120

120

120

120

120

Page 36: Functions Robin Burke CSC 358/458 4.10.2006. Outline Errata Homework #2 Project Structures Functions review parameter lists anonymous fns closures recursion.

Exercise

average

Page 37: Functions Robin Burke CSC 358/458 4.10.2006. Outline Errata Homework #2 Project Structures Functions review parameter lists anonymous fns closures recursion.

Symbolic Programming Example

iterators

Page 38: Functions Robin Burke CSC 358/458 4.10.2006. Outline Errata Homework #2 Project Structures Functions review parameter lists anonymous fns closures recursion.

Homework #3

Crazy Eights Create a playable game

change the game state to use a closure

add a function that chooses a move for the computer players

Page 39: Functions Robin Burke CSC 358/458 4.10.2006. Outline Errata Homework #2 Project Structures Functions review parameter lists anonymous fns closures recursion.

Lab