Lisp Standard Library
This provides documentation for every built-in function in the Lisp standard library. It is not auto-generated, please update this documentation if you change the API in any way.
In general every user-facing API in the standard library should be documented here.
(x ...)represents a listx.& bodymeans that the rest of the list is represented bybody.[something]means thatsomethingis optional.
Top-level primitives
These are “functions” that can only appear at the top-level of the program. This means they can’t be nested in any other expressions.
- (defun function-name (args ...) & body)
Defines a function
function-namethat takesargsand evaluatesbody.function-nameis quoted, not evaluated.(defun say-hi (name) (print "Hi, ") (print name)) (say-hi "Joe") ; "Hi," ; "Joe"
- (defmacro macro-name (args ...) & body)
defmacrois to macros asdefunis to functions. Whenmacro-nameis called, whatever it evaluates to will be compiled.Note that internally this compiles a function the same way all other functions are compiled, meaning you can call any lisp function from a macro definition and it will work as expected.
(defun double (n) (+ n n)) (defmacro call-with-4 (whatever) (print "this was run at **compile time**") (print whatever) ;; ``whatever`` expands to the form passed to this macro, in this case ;; ``double``. (list whatever 4)) (print (call-with-4 double)) ; "this was run at **compile time**" ; 'double ; 8
Functions
- (if condition true-condition [false-condition])
Evaluates
condition, if it is truthy (non-nil)true-conditionis evaluated. Otherwisefalse-conditionis evaluated. Iffalse-conditionis not provided andconditionisnil,ifwill evaluate tonil.(print (if (= 2 3) "2 = 3" "2 /= 3")) ; 2 /= 3
- (let1 (variable binding) & body)
Evaluates
bindingand binds it tovariable, then evaluatesbody. Afterbodyis evaluatedvariableis unbound.(let1 (greeting (greet "John")) (do-something greeting) (print greeting)) ; greeting is no longer bound
- (gc)
Force the garbage collector (GC) to run.
- (car pair)
Return the first item in
pair.(car (cons 'a 'b)) ;=> 'a
- (cdr pair)
Return the second (last) item in
pair.(cdr (cons 'a 'b)) ;=> 'b
- (cons a b)
Return a cons-pair containing
aandb.
- (print val)
Print out
valto standard output. This will not be formatted as an s-expression, but in a manner more similar to the internal representation.
- (list & items)
Returns a cons-list of items.
(list 1 2 3) ; is the same as (cons 1 (cons 2 (cons 3 nil)))
- (quote form)
Returns form without evaluating it.
'(cons a b) ; or (quote cons a b) ; is the same as (list 'cons 'a 'b)
- (lambda (args ...) & body)
Creates an anonymous function (closure). This function uses lexical scope meaning that any free variables (variables bound outside this lambda definition) are “captured” by the closure. You can call this function with
funcall(to be implemented) orapply.(let1 (number 3) (let1 (adds-number-to (lambda (n) (+ n number))) (print (apply adds-number-to '(5))))) ; 8
- (apply function (args ...))
Call
functionwithargsand return the result. Note that since this is a Lisp-2 (i.e. functions and variables do not share the same namespace) you need to pass a function object (i.e. a lambda or quoted function).