Lecture #12 Programming Languages MISHRA 95

G22.2210

Programming Languages: PL

B. Mishra
New York University.


Lecture # 12

---Slide 1---
Global and Local Variables

---Slide 2---
LOCAL VARIABLES

---Slide 3---
LET and LET*

---Slide 4---
LET*: (contd)

---Slide 5---
Lisp as Data Bases

---Slide 6---
Functional Programming Style

---Slide 7---
Examples

  (SETQ *RELATIONSHIP-FUNCTIONS*
        '((FATHER . FATHER-OF?)
          (MOTHER . MOTHER-OF?)))

  (DEFUN FIND-RELATIVE (RELATION PERSON)
     (LET ((FUN-NAME (CDR (ASSOC RELATION
                      *RELATIONSHIP-FUNCTION*))))
          (IF (NULL FUN-NAME)
              (ERROR "Unknown relationship")
              (FUNCALL (SYMBOL-FUNCTION FUN-NAME)
                       PERSON))))

(FIND-RELATIVE (FATHER TOM))
=>
    (FUNCALL (SYMBOL-FUNCTION 'FATHER-OF?) 'TOM)
=   (FUNCALL #'FATHER-OF? 'TOM)
=   (FATHER-OF? 'TOM)

---Slide 8---
APPLY & LAMBDA

---Slide 9---
Mapping Functions: MAPCAR

---Slide 10---
Examples

    (MAPCAR #'NUMBERP '(A 3 B 2 4 C 7))
=>  (NIL T NIL T T NIL T)


    (MAPCAR #'(LAMBDA (N) (+ 1 N))
             '(5 3 6 7 2))
=>  (6 4 7 8 3)


    (MAPCAR #'(LAMBDA (X Y) (CONS X Y))
             '(MIAMI DENVER OAKLAND LOS-ANGELES)
             '(DOLPHINS BRONCOS RAIDERS RAMS))
=> ((MIAMI.DOLPHINS) (DENVER.BRONCOS)
    (OAKLAND.RAIDERS) (LOS-ANGELES.RAMS))

---Slide 11---
How LISP Works

---Slide 12---
LISP Compiler

---Slide 13---
LISP Storage Layout

Address space is divided into three parts:

---Slide 14---
LISP Internals

Internally, user objects are indistinguishable from objects in the internal Lisp system itself

---Slide 15---
Type of a LISP Object

A LISP object can be stored as:

---Slide 16---
OBARRAY or OBLIST

A vector of list of symbols

(Think of a Hash Table)

---Slide 17---
Garbage Collection

During Lisp computation, periodically the heap becomes full and it is necessary to free space by identifying those cons cells that are no longer accessible (thus, usable).

A cons cell not accessible,

  1. if either there is no pointer to it
  2. or all objects that point to it are themselves inaccessible.

---Slide 18---
Garbage Collection (contd)

---Slide 19---
Garbage Collection (contd)

---Slide 20---
Lisp Function with Garbage Collection

Now, we can write the LISP CONS function as follows:

    (DEFUN CONS (X Y)
       (IF (NULL *FREE-LIST*)
           (GARBAGE-COLLECT))
       (LET ((CONS-CELL *FREE-LIST*))
            (SETQ *FREE-LIST* (CDR CONS-CELL))
            (RPLACA CONS-CELL X)
            (RPLACD CONS-CELL Y)
            CONS-CELL))

[End of Lecture #12]