# exlisp v0.1.0 - Table of Contents

> A Lisp implementation and REPL running on Elixir/BEAM

## Modules

- [BuiltinFunction](BuiltinFunction.md): Module responsible for determining ExLisp built-in functions
and compiling them to Erlang Abstract Format.

- [ExLisp](ExLisp.md): Documentation for `ExLisp`.

- [ExLisp.ASDF](ExLisp.ASDF.md): Lightweight loader for Common Lisp ASDF (Another System Definition Facility).
Parses defsystem definitions in `.asd` files, resolves dependencies,
and loads components (`.lisp` files) in sequential order.

- [ExLisp.Builtins](ExLisp.Builtins.md): Implementation module for Common Lisp (SBCL-compliant) built-in functions and predicates.

- [ExLisp.CLI](ExLisp.CLI.md): ExLisp CLI entry point.
Starts an IEx-based Lisp REPL when launched with the `exlisp` command.
Also executes compilation to BEAM modules when files are specified.

- [ExLisp.Closure](ExLisp.Closure.md): ExLisp closure and variadic function struct.
Wraps functions with lambda list keywords like &optional, &rest, &key,
enabling accurate argument dispatch.

- [ExLisp.Compiler](ExLisp.Compiler.md): Module for compiling Lisp source code into BEAM bytecode (.beam files).
Compiled modules can be used as standard Elixir / Erlang modules.

- [ExLisp.Env](ExLisp.Env.md): Module managing global environments (variables and functions) for ExLisp.
Uses `:persistent_term` to hold and reference values and functions across sessions with extreme speed.

- [ExLisp.Formatter](ExLisp.Formatter.md): Code formatter for Common Lisp.
- [ExLisp.Hex](ExLisp.Hex.md): Hex.pm client module.
Provides functionality to dynamically download, compile, and load
Hex.pm libraries from within the REPL or Lisp scripts.

- [ExLisp.IOTracker](ExLisp.IOTracker.md): Helper module for tracking standard output during REPL evaluation and outputting
a newline (fresh-line) if no trailing newline exists at the end of evaluation.

- [ExLisp.LispParser](ExLisp.LispParser.md): Custom S-expression parser for ExLisp.
Performs lexical analysis and parsing (S-expression generation) of Lisp
without external dependencies or regular expressions.

- [ExLisp.List](ExLisp.List.md): Lisp list struct for REPL display.
Implements the Inspect protocol to output in Common Lisp format such as (A B C) or (EXPT 2 3).

- [ExLisp.Loop](ExLisp.Loop.md): Parser and transpiler for Common Lisp Extended Loop syntax.
Parses loop clauses such as `(loop for i below 5 sum i)` and expands
into standard Lisp AST (tail-recursive functions with block, let*, labels).

- [ExLisp.Macro](ExLisp.Macro.md): Common Lisp-style macro expansion system.
Provides destructuring-bind, backquote expansion, and macroexpand.

- [ExLisp.Parser](ExLisp.Parser.md): IEx parser. Inspects nested parentheses of input strings and generates AST
that invokes `ExLisp.eval/1` once top-level parentheses are closed.

- [ExLisp.Quicklisp](ExLisp.Quicklisp.md): Quicklisp client module.
Fetches and manages Quicklisp dist metadata for Common Lisp, and handles
automatic downloading, unpacking, dependency resolution, and loading
of third-party libraries via `ql:quickload`.

- [ExLisp.Ratio](ExLisp.Ratio.md): Struct representing rational numbers (fractions) in ExLisp.

- [ExLisp.Reader](ExLisp.Reader.md): Module to split Lisp source code into top-level S-expressions (per expression).

- [ExLisp.Symbol](ExLisp.Symbol.md): Lisp symbol struct for REPL display.
Implements the Inspect protocol to output symbol names without colons or quotes.

- [LispBeam](LispBeam.md): Generates Erlang Abstract Format from ExLisp AST,
compiles it to BEAM binaries, and executes it (with interactive REPL).

