Open In App

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:




(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 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




(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.


Article Tags :