
- LISP Tutorial
- LISP - Home
- LISP - Overview
- LISP - Environment
- LISP - REPL
- LISP - Program Structure
- LISP - Basic Syntax
- LISP - Data Types
- Lisp Macros
- LISP - Macros
- LISP - Backquote and Comma
- LISP - Code Generation Using Macro
- LISP - Variable Capture and Hygienic macro
- LISP - Scope and Binding
- LISP - Macro Writing Style
- LISP - Macro Characters
- LISP - Read-Time Macros
- LISP - Compiler Macros
- LISP - Uses of Macros
- Lisp Functions
- LISP - Functions
- LISP - Functions vs Macros
- LISP - Calling Function using funcall
- LISP - Calling Function using apply
- LISP - Closures
- LISP - Functions as Arguments
- LISP - Functions as Return Values
- LISP - Recursion
- LISP - Built-in Functions
- Lisp Predicates
- LISP - Predicates
- LISP - Generic Data Type Predicates
- LISP - Specific Data Type Predicates
- LISP - Equality Predicates
- LISP - Numeric Predicates
- LISP - Comparison Predicates
- LISP - Logical Predicates
- LISP - List Predicates
- LISP - Custom Predicates
- LISP - Chaining Predicates
- Lisp Arrays
- LISP - Arrays
- LISP - Adjustable Arrays
- LISP - Fill Pointers in Arrays
- LISP - Specialized Arrays
- LISP - Arrays Properties
- LISP - Iterating over Arrays
- LISP - Multidimensional Arrays
- LISP - Row-Major Order
- Lisp Strings
- LISP - Strings
- LISP - String Concatenation
- LISP - String Comparison
- LISP - String Case Conversion
- LISP - String Trimmimg
- LISP - String Searching
- LISP - Getting Substring
- LISP - String Replacement
- LISP - Sorting Strings
- LISP - Merging Strings
- LISP - Accessing Characters of String
- LISP - String length
- LISP - Escape Sequences
- Lisp Sequences
- LISP - Sequences
- LISP - Accessing Element of Sequence
- LISP - Sequence length
- LISP - Getting Subsequence
- LISP - Search Element in Sequence
- LISP - Sequence Concatenation
- LISP - Reversing a Sequence
- LISP - Mapping Sequence Element
- LISP - position of Element
- LISP - Remove an Element
- LISP - Sort Sequence
- LISP - Merge Sequences
- LISP - every function
- LISP - some function
- LISP - notany function
- LISP - notevery function
- Lisp Lists
- LISP - Lists
- LISP - Accessing Elements of Lists
- LISP - Modifications to Lists
- LISP - Using mapcar on List
- LISP - Using mapc on List
- LISP - Using reduce on List
- LISP - Removing elements from List
- LISP - Reversing a List
- LISP - Sorting a List
- LISP - Searching a List
- LISP - List vs Vectors
- LISP - Matrix Multiplication
- Lisp Vectors
- LISP - Vectors
- LISP - Creating Vectors
- LISP - Accessing Elements of Vectors
- LISP - Modifications to Vectors
- LISP - Adjustable Vectors
- LISP - Specialized Vectors
- LISP - Vector Functions
- Lisp Set
- LISP - Set
- LISP - Adding elements to the Set
- LISP - Getting SubSet from a Set
- LISP - Set Difference
- LISP - Set Exclusive OR
- LISP - Set Intersection
- LISP - Set Union
- LISP - Representing Set with HashTable
- LISP - List as Set vs HashTable as Set
- Lisp Tree
- LISP - Tree
- LISP - Recursive Traversal
- LISP - Inorder Traversal
- LISP - Preorder Traversal
- LISP - Postorder Traversal
- LISP - Depth First Traversal
- LISP - Modifying Tree
- LISP - Search Tree
- LISP - Binary Tree
- Lisp Hash Table
- LISP - Hash Table
- Adding Values to Hash Table
- Removing Values from Hash Table
- Updating Values of Hash Table
- Iterating Hash Table Entries
- Searching key in HashTable
- Checking Size of HashTable
- Using Custom Equality Check
- Lisp - Input − Output
- LISP - Input − Output
- LISP - Streams
- LISP - Reading Data from Streams
- LISP - Writing Data to Streams
- LISP - File I/O
- LISP - String I/O
- LISP - Formatting with Format
- LISP - Interactive I/O
- LISP - Error Handling
- LISP - Binary I/O
- Lisp - Structures
- LISP - Structures
- LISP - Accessors and Mutators
- LISP - Structure Options
- LISP - Structure Types
- LISP - Applications and Best Practices
- Lisp - CLOS
- LISP - CLOS
- Lisp - Objects
- LISP - Class
- LISP - Slots and Accessors
- LISP - Generic Functions
- LISP - Class Precedence
- LISP - Metaobject Protocol
- LISP - Multimethods
- LISP - Multiple Inheritance
- LISP - Method Combinations
- LISP - Method Combinations
- LISP - :before Method Combination
- LISP - :primary Method Combination
- LISP - :after Method Combination
- LISP - :around Method Combination
- LISP - + Method Combination
- LISP - and Method Combination
- LISP - append Method Combination
- LISP Useful Resources
- Lisp - Quick Guide
- Lisp - Useful Resources
- Lisp - Discussion
Lisp - Defining System
Defining a System refers to collection of related files into one logical unit like a library or an application. Lisp is not having built-in support for such managment but we can use system definition tools like ASDF, Another System Definition Facility. ASDF can be used to handle definition and management of a LISP system.
Usage of ASDF to define a System
ASDF provides a structure in which we can define our LUA project as a system. We can define the dependencies, when those dependencies are to be loaded, either during compilation or during load time. An ASDF system file as .asd file generally looks like following −
Following code shows various scenarios.
my-system.asd
(defsystem my-system :version "0.1.0" :author "Admin <admin@tutorialspoint.com>" :license "MIT" :description "My First System" :depends-on (:some-dependency :another-dependency) :components ((:module "src" :components ((:file "main") (:file "utils"))) (:file "tests")))
Where
defsystem my-system starts the core form defining the system. my-system is name of our LISP project. Generally it is all lowercase.
:version represents the version of the system.
:author represents the author(s) of the system.
:license represents the distribution license of the system.
:description is used to provide a short description of the system.
:depends-on is used to provide list of other ASDF based dependencies on which our system is dependent. Usually these libraries are available using QuickLisp.
:components is used to provide list of parts of the application including source files or folders containing source files.
Example Directory Structure
A typical structure for a system can be as shown below −
my-system/ |-- my-system.asd |-- src/ | |-- main.lisp | |-- utils.lisp |-- tests.lisp
Loading ASDF Based System
Once .asd file is define, we can use ASDF functions to load system in the environment and start interactions. In Common LISP, ASDF is generally pre-loaded. In case it is not present, it can be installed using QuickLisp.
; Using Quicklisp as recommended (ql:quickload :my-system)
or using asdf:load-system.
; Using ASDF directly, less commonly used (asdf:load-system :my-system)
It will load all dependencies in correct order and then project will be compiled and loaded. Now we can use functions, or other code available in our system project in the current project seemlessly.
Advantages of ASDF
Standardization − ASDF provides a standard way to define and manage various LISP projects in a consistent manner.
Dependency Management − We can load required libaries easily.
Compilation − Automatic compilation of source files.
Portability − Being a standard system, code can be accessed by other projects easily.
Integration with Quicklisp − QuickLisp is one of the most popular Lisp library manager. An integration with QuickLISP makes it easy for developers to use ASDF seemlessly.