- Interpreter supporting lambdas, closures, many Common Lisp functions (see complete list below)
- Can be run in REPL or single-command mode (see details in 'Running' section below)
Supported Common Lisp Types |
---|
Symbols |
Lists (and Dotted Lists) |
Functions |
Streams |
Strings |
Numbers (integers only) |
Supported Common Lisp Functions/Macros |
---|
Flow control functions |
if |
case |
cond |
Lambda functions |
apply |
funcall |
lambda (with &optional and &rest ) |
defun |
eval |
List functions |
cons |
length |
subseq |
reverse * |
member * |
assoc * |
mapcar * |
remove , remove-if , remove-if-not * |
car , cdr |
caar , cadr , cdar , cddr , caaar , caadr , cadar , caddr , cdaar , cdadr , cddar , cdddr , caaadrr , caaaarr , caadarr , cadaarr , caaddrr , cadadrr , caddarr , cdaaarr , cdaadrr , cadddrr , cdadarr , cdaddrr , cddaarr , cddadrr , cdddarr , cddddrr * |
function |
Number functions |
+ , - , 1+ , 1- , * , / |
/= , = , < , > , <= , >= |
plusp , minusp , evenp , oddp * |
mod , rem |
String functions |
string= , string-equal , string/= , string< , string-lessp , string> , string-greaterp , string<= , string-not-greaterp , string>= , string-not-lesserp |
string-downcase , string-upcase (both with :start and :end ) |
IO functions |
read |
load |
open (with :direction , :input , :output , :io ) |
close |
prin1 |
print |
write-string |
Other functions |
setq |
eql |
weakEqual |
atom |
quoted (') |
not , and , or |
* indicates functions defined in CommonLib.lisp . It is only available in REPL mode. See the 'Running' section below on how to make these functions available in the REPL |
You will need GHCI installed.
$> git clone https://github.com/neerajrao/common-lisp-repl-haskell.git
$> cd common-lisp-repl-haskell
You can now try one of the following
Compiles source, creates the clisp executable and runs it
$> make run
Compiles source, creates the clisp executable. Does NOT run it.
$> make
Run in REPL mode
$> clisp
Run in single-command mode
$> clisp "your common lisp expression"
If you want the functions defined in CommonLib.lisp
(the ones marked by * in the list of supported functions above) to be available, you must load it after the REPL starts
clisp>> (load "src/CommonLib.lisp")
This project closely follows the excellent wikibook Write Yourself a Scheme in 48 Hours by Jonathan Tang.
There are some important differences:
- Support for Lisp-2 namespaces (distinct variable and function namespaces) (instead of Scheme's Lisp-1 namespaces)
- Support for Common Lisp functions (instead of Scheme functions)