Defining Functions

Programs

w In Lisp programs are made up of interrelated functions.

w A function is a short piece of code to accomplish a specific task.

w The basic idea of a function in mathematics is that a function has zero or

more input values and one or more output values.  The actual output

value(s) produced depend directly on the input values.  We say that the

output is a function of the input.

Example

w In mathematics the function name is followed by a left parenthesis, followed by

the input values separated by commas, followed by a right parenthesis.  Thus,

mult(2,4) would be the equivalent of 2 x 4.

w  In Lisp the right parenthesis comes first and there are no commas to separate the

input values.  Thus:  (mult 2 4).

Historical Note: This way of designating a function and its arguments is a form of

prefix notation, a variation of Polish notation (so named in honor of Polish

logician Jan Lukasiewicz), and is called Cambridge Polish notation.

Parameters

w  When defining a function in a programming language, we refer to the arguments

with which the function will be called as formal parameters, formal arguments,

or sometimes simply parameters.

defun

w  In Lisp, a user-defined function is specified with the built-in macro, defun.

w  The general format is:

(defun <function-name> (<parameter-list>) <function-body>)

w  Notice that the parameters are enclosed within parentheses.  If there are no

parameters, that is indicated with a set of empty parentheses.

w  <function-body> is Lisp code which specifies how to calculate the output

value(s) from the input value(s).

w  Example 1:

(defun mult1 (multiplicand multiplier)

(* multiplicand multiplier))

w  Example 2:

(defun mult2 (x y) (* x y))

Saving

w Functions can be defined in Lisp by simply typing a function definition while in

Lisp's interactive mode.  But these definitions are lost as soon as one exits from

Lisp.

w A better way to define functions is to place function definitions into a file using

an editor, and then load them into Lisp.

Assignment:

1. Try out both Examples 1 and 2.  First define each function.  Then try

out various input values to see if they give the correct answer.

2. Define and test add3num, which takes 3 numbers as input values and sums

them up.

3. Define and test prodtriple, which takes 2 numbers, x and y, and returns

the value: 3xy.