LISP – Packages

  • Post author:
  • Post category:LISP
  • Post comments:3 Comments
LISP - Packages

This topic is about LISP – Packages.

In general term of programming languages, a package is designed for providing a way to keep one set of names separate from another. The symbols declared in one package will not conflict with the same symbols declared in another. This way packages reduce the naming conflicts between independent code modules.

The LISP reader maintains a table of all the symbols it has found. When it finds a new character sequence, it creates a new symbol and stores in the symbol table. This table is called a package.

The current package is referred by the special variable *package*.

There are two predefined packages in LISP โˆ’

  • common-lisp โˆ’ it contains symbols for all the functions and variables defined.
  • common-lisp-user โˆ’ it uses the common-lisp package and all other packages with editing and debugging tools; it is called cl-user in short

Package Functions in LISP

The following table provides most commonly used functions used for creating, using and manipulating packages โˆ’

Sr.No.Function and Description
1make-package package-name &key :nicknames :useIt creates and returns a new package with the specified package name.
2in-package package-name &key :nicknames :useMakes the package current.
3in-package nameThis macro causes *package* to be set to the package named name, which must be a symbol or string.
4find-package nameIt searches for a package. The package with that name or nickname is returned; if no such package exists, find-package returns nil.
5rename-package package new-name &optional new-nicknamesit renames a package.
6list-all-packagesThis function returns a list of all packages that currently exist in the Lisp system.
7delete-package packageIt deletes a package.

Creating a LISP Package

The defpackage function is used for creating an user defined package. It has the following syntax โˆ’

(defpackage :package-name
   (:use :common-lisp ...)
   (:export :symbol1 :symbol2 ...)
)

Where,

  • package-name is the name of the package.
  • The :use keyword specifies the packages that this package needs, i.e., packages that define functions used by code in this package.
  • The :export keyword specifies the symbols that are external in this package.

The make-package function is also used for creating a package. The syntax for this function is โˆ’

make-package package-name &key :nicknames :use

The arguments and keywords has same meaning as before.

Using a Package

Once you have created a package, you can use the code in this package, by making it the current package. The in-package macro makes a package current in the environment.

Example

Create a new source code file named main.lisp and type the following code in it.

(make-package :tom)
(make-package :dick)
(make-package :harry)
(in-package tom)
(defun hello () 
   (write-line "Hello! This is Tom's Adglob")
)

(hello)
(in-package dick)
(defun hello () 
   (write-line "Hello! This is Dick's Adglob")
)

(hello)
(in-package harry)
(defun hello () 
   (write-line "Hello! This is Harry's Adglob")
)

(hello)
(in-package tom)
(hello)
(in-package dick)
(hello)
(in-package harry)
(hello)

When you execute the code, it returns the following result โˆ’

Hello! This is Tom's Adglob
Hello! This is Dick's Adglob
Hello! This is Harry's Adglob

Deleting a Package

The delete-package macro allows you to delete a package. The following example demonstrates this โˆ’

Example

Create a new source code file named main.lisp and type the following code in it.

(make-package :tom)
(make-package :dick)
(make-package :harry)
(in-package tom)
(defun hello () 
   (write-line "Hello! This is Tom's Adglob")
)

(in-package dick)
(defun hello () 
   (write-line "Hello! This is Dick's Adglob")
)

(in-package harry)
(defun hello () 
   (write-line "Hello! This is Harry's Adglob")
)

(in-package tom)
(hello)
(in-package dick)
(hello)
(in-package harry)
(hello)
(delete-package tom)
(in-package tom)
(hello)

When you execute the code, it returns the following result โˆ’

Hello! This is Tom's Adglob
Hello! This is Dick's Adglob
Hello! This is Harry's Adglob
*** - EVAL: variable TOM has no value

In this topic we learned about LISP – Packages. To learn more, Click Here.

This Post Has 3 Comments

  1. Where To Buy Proxies

    Pretty section of content. I simply stumbled upon your weblog and in accession capital to assert that I get in fact enjoyed account your weblog posts. Any way I will be subscribing on your augment or even I success you get admission to persistently quickly.

  2. Catherine Wintle

    Good post. I learn something totally new and challenging on sites I stumbleupon everyday. It will always be exciting to read through articles from other authors and practice something from their websites.

Leave a Reply