Lecture Notes: CLII


1. Review HW

2. &optional/&rest/&key

3. Functions as first-class objects [for now passing functions. later creating on fly]

4. Recursion Revisited


           (defun Square-Sum (Start End)
             (if
               (> Start End)
               0.0d0
               (+ (Square Start)
                  (Square-Sum (1+ Start) End))))


           (defun Pi-Sum (Start End)
             (if
               (> Start End)
               0.0d0
               (+ (/ 8 (* Start (+ Start 2)))
                  (Pi-Sum (+ Start 4) End))))

5. Iteration "vs." Recursion - Extensibility Example

6. Lambda Forms

7. Closures

           (defun Add-N (List-of-Nums N)
             (mapcar #'(lambda (X) (+ X N))
                     List-of-Nums)
           (defun Make-Counter (&key (Start 0) (Step 1))
             (setq Start (- Start Step))
             #'(lambda () (setq Start (+ Start Step))) )
           
Normal funcall version, plus:

           (setf (symbol-function 'Foo) (Make-Counter))
           (Foo)
           
           (defun Make-Fancy-Counter (&optional (Initial-Value 0))
             (list
               #'(lambda () Initial-Value)
               #'(lambda (New-Value) (setq Initial-Value New-Value)))))
           
           (defun Get-Value (Fancy-Counter)
             (funcall (first Fancy-Counter)))
           
           (defun Set-Value (Fancy-Counter New-Val)
             (funcall (second Fancy-Counter) New-Val))

Table of contents

1. - Review HW
2. - &optional/&rest/&key
3. - Functions as first-class objects [for now passing functions. later creating on fly]
4. - Recursion Revisited
5. - Iteration "vs." Recursion - Extensibility Example
6. - Lambda Forms
7. - Closures