Skeleton function: (LAMBDA-CLOSURE () () () (&OPTIONAL &REST REST) (LET* () (LABELS () (BLOCK SETUPSTATEMENTS NIL) (COND (T NIL))))) Name of function is CLOSURE paramList of function is (&OPTIONAL &REST REST) env of function is NIL body of function is ((LET* () (LABELS () (BLOCK SETUPSTATEMENTS NIL) (COND (T NIL))))) Analyzing closure of form fGenFunc env vars of function are NIL params of function are (&OPTIONAL &REST REST) local vars of function are NIL methods of function are NIL setup block of function is (BLOCK SETUPSTATEMENTS NIL) cond of function is (COND (T NIL)) Now, adding local variable (x 2), using append an optional parameter (L nil), using insertNth a print statement in the block instead of the nil, using replaceNth a cond case to check if L is a list, using insertNth and a method to compute x^2, using insertFromEnd The resulting function is: (LAMBDA-CLOSURE () () () (&OPTIONAL (L NIL) &REST REST) (LET* ((X 2)) (LABELS ((SQUARE NIL (* X X))) (BLOCK SETUPSTATEMENTS (FORMAT T x is ~A, x^2 is ~A, L is ~A~% X (SQUARE) L)) (COND ((LISTP L) (FORMAT T ~A is a list~% L)) (T NIL))))) Analyzing f gives: Name of function is CLOSURE paramList of function is (&OPTIONAL (L NIL) &REST REST) env of function is NIL body of function is ((LET* ((X 2)) (LABELS ((SQUARE NIL (* X X))) (BLOCK SETUPSTATEMENTS (FORMAT T x is ~A, x^2 is ~A, L is ~A~% X (SQUARE) L)) (COND ((LISTP L) (FORMAT T ~A is a list~% L)) (T NIL))))) Analyzing closure of form fGenFunc env vars of function are NIL params of function are (&OPTIONAL (L NIL) &REST REST) local vars of function are ((X 2)) methods of function are ((SQUARE NIL (* X X))) setup block of function is (BLOCK SETUPSTATEMENTS (FORMAT T x is ~A, x^2 is ~A, L is ~A~% X (SQUARE) L)) cond of function is (COND ((LISTP L) (FORMAT T ~A is a list~% L)) (T NIL)) Now try running the modified function with the default parameter x is 2, x^2 is 4, L is NIL NIL is a list Now try running the modified function with list (1 2 3) x is 2, x^2 is 4, L is (1 2 3) (1 2 3) is a list ---Done---