          Lecture 2 - Page 21 : 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
 List functions
 There exists a number of important List functions in Scheme, and we often write other such functions ourselves We will here take a look at some of the most important list functions, as defined by the language itself. You are encouraged to read about them in the Scheme Report, to which we make a reference below.
 (null? lst)     A predicate that returns whether lst is empty
 (list? lst)     A predicate that returns whether lst is a proper list
 (length lst)     Returns the number of elements in the proper list lst
 (append lst1 lst2)     Concatenates the elements of two or more lists
 (reverse lst)     Returns the elements in lst in reverse order
 (list-ref lst k)     Accesses element number k of the list lst It should be noticed that the first element is designated as element number 0. Thus (list-ref '(a b c) 1) returns b
 (list-tail lst k)     Returns the k'th tail of the list lst