          Lecture 2 - Page 43 : 46
 Functional Programming in SchemeExpressions, Types, and Functions * Lisp and Scheme Lisp Scheme * Expressions and values Expressions, values, and types Examples of expressions and their values Evaluation of parenthesized expressions Arithmetic expressions Equality in Scheme The read-eval-print loop * Types Types Type checking Static type checking An example of type checking Types in functional programming languages * Lists Proper lists Symbolic expressions and improper lists Practical list construction List functions Association lists Property lists Tables as lists of rows Programs represented as lists * Other Data Types Other simple types Vectors Strings * Definitions Definitions * Functions The function concept Lambda calculus Functions in Scheme Function objects Functions as first class values Anonymous functions Lambda expressions in Scheme Optional parameters of Scheme functions (1) Optional parameters of Scheme functions (2) Closures Function definition in Scheme Simple web-related functions (1) Simple web-related functions (2) Function exercises
 Function definition in Scheme
 A function object can be bound to a name via define like any other kind of value.But we often use a slightly different, equivalent syntax for function definitions, where the 'lambda' is implicitly specified
 ``` (define f (lambda (p1 p2) ...))```

The ordinary way to bind f to the value of a lambda expressions

 ``` (define (f p1 p2) ...)```

An equivalent syntactic sugaring with a more shallow parenthesis structure. Whenever Scheme identifies a list at the 'name place' in a define form, it carries out the transformation (define (f p1 p2) ...) => (define f (lambda (p1 p2) ...)) . Some Scheme programmers like the form (define (f p1 p2) ...) because the calling form (f p1 p2) is a constituent of the form (define (f p1 p2) ...)