# Constants in LISP

In LISP all constants are global variables. Values of constant never change throughout the execution of the program.

**Defining constant in LISP:**

New global constants are defined using the **DEFCONSTANT** construct **Syntax:**

(defconstant name initial-value-form "documentation-string")

**Example:**

Let’s create a global constant whose value will contain the rate of shirt

(defconstant shirt-rate 575 "shirt-rate is having a constant value of 575")

Now let’s create a function that will calculate the total bill by taking the number of shirts as input and then multiplying it with our previously defined constant *shirt-rate*

(defun calc-total-bill (n) "Calculates the total bill by multiplying the number of shirts purchased with its constant rate" (* shirt-rate n))

Let’s call this function

(format t "Total number of shirts purchased : 7~%") (format t "Price of each shirt : ~2d~%" shirt-rate) (format t "Total bill amount is : ~2d~%" (calc-total-bill 7))

**Code:**

## Lisp

`(defconstant shirt` `-` `rate ` `575` ` ` `"shirt-rate is having a constant value of 575"` `)` ` ` `(` `defun` `calc` `-` `total` `-` `bill (n)` ` ` `"Calculates the total bill by multiplying the number of` ` ` `shirts purchased with its constant rate"` ` ` `(` `*` `shirt` `-` `rate n))` ` ` `(` `format` `t` `"Total number of shirts purchased : 7~%"` `)` `(` `format` `t` `"Price of each shirt : ~2d~%"` `shirt` `-` `rate)` `(` `format` `t` `"Total bill amount is : ~2d~%"` `(calc` `-` `total` `-` `bill ` `7` `))` |

**Output : **

We can check if some symbol is the name of a global variable or constant by using **boundp** predicate, As it is the predicate it returns **T ** if it finds the constant with a particular name and will return **NIL** if it doesn’t.

For example, in our program, we have a constant *shirt-rate *defined so let’s run this

## Lisp

`(write (boundp 'shirt` `-` `rate))` `(terpri)` `(write (boundp 'rate))` |

**Output : **

T NIL

As expected it has returned **T **when it finds a constant *shirt-rate* but returns **NIL** when it can’t find the constant *rate* in the program.