CSC 530 Lecture Notes Week 3
A Brief Review of Lambda Calculus
Introduction to Programming Language Type Systems
| 
Lambda Calculus
 Notation  | 
Lisp
 Notation  | 
| λ x.x | (lambda (x) x) | 
| f = λ x.x | 
(defun f (x) x)
 -- or -- (setq f (lambda (x) x))  | 
| f 1 | 
(f 1)
 -- or -- (apply f (list 1))  | 
| g = λ x.f x | (defun g (x) (f x)) | 
which delivers 11.(apply (lambda (x) (+ x 1)) '(10))
versus(defun f (x) (+ x 1))
that is, f and g define the same function.(setq g (lambda (x) (+ x 1)))
(setq memory
    (lambda (x) (cadr (assoc x '( (x 10) (y 20) (z 30))))))
(apply memory '(y))
(defun add-binding (memory binding)
    (nconc (cadadr (cdadar (nthcdr 5 memory))) (list binding)))
(excuse the nconc, please).
forall type T,
  function Eq(x:T, y:T) =
    x = y;
class A = ... ;
class B subclass of A = ... ;
class C subclass of a = ... ;
function Eq(x:A, y:A) =
    x = y;
(deftype name type)
    where type is
      * one of the atomic type names sym, int, real, string, or bool
      * a composite type specified with one or more of the four type forms
        below
      * the name of a defined type, including a recursive reference to such a
        name
      * a type variable of the form ?X, for any atom X
(array type [bounds])
    where bounds is either an integer, or (integer integer) pair, or a type var
(record fields)
    where fields is a list of (name type) pairs in which all names must be
    unique; fields may be a single type var
(union fields)
    where fields is a list of (name type) pairs in which all names and types
    must be unique; fields may be a single type var
(function args outs [suchthat])
    where args and outs are lists of names or (name type) pairs; names and
    (name type) pairs can be mixed in a signature; the name in a (name type)
    pair may be empty; args and/or outs may each be a single type var; suchthat
    is of the form (suchthat predicate), and the predicate can reference type
    vars
(defun name args [outs] [suchthat] body)
    where args, outs, and suchthat are as defined above for the function type
| Type | Literal Denotation | 
| sym | any quoted atom | 
| int | any atom for which integerp is true | 
| real | any atom for which numberp is true and integerp is false | 
| string | any atom for which stringp is true | 
| bool | t or nil | 
| array | a list, the elements of which meet the array's bounds and type specs | 
| array | a list, the elements of which meet the record's field specs | 
| union | a value whose type is one of field types | 
| function | the name of a defun'd function or a lambda expression whose signature matches the function type's args and outs specs |