3 unstable releases
0.2.1 | Jan 24, 2023 |
---|---|
0.2.0 | Jan 22, 2023 |
0.1.0 | Jan 21, 2023 |
#552 in Programming languages
33KB
767 lines
Callum's Lisp
A Lisp interpreter designed to be run in the browser using WASM.
Usage
You can perform simple numerical operations using +, -, *, and /:
(+ 1 2) => 3
(/ 5 2) => 2.5
(- 2) => -2
(/ 5) => 0.2
You can define constants using def
:
(def x 3) => 3
x => 3
You can create functions using lambda
:
(lambda (x) (+ x 1)) => <function>
(def add1 (lambda (x) (+ x 1))) => <unspecified>
(add1 3) => 4
List of all builtin functions and special forms
Special forms
(def name value)
: creates a binding of name to value in current environment(lambda (bindings) expr)
or(λ (bindings) expr)
: creates a function(if cond do else)
: evaluate do expr if cond is true, otherwise evaluate else expr
Builtin functions
+
,-
,*
,/
: simple arithmetic operatorsexit
: exits with code 0 or code provided by argumenteval
: evaluate the expression passed as an argumentuse
: evaluate all expressions contained in a file in the current environmentputstr
: print a string to stdoutreadline
: read a line from stdinequal?
: check if any amount of values are equal>
,>=
,<
,<=
: number comparison operatorslist
: creates a list out of arguments givenlist?
: returns true if argument is a list, otherwise returns falseempty?
: returns true if argument is a list of length 0, otherwise returns falsecount
: returns the length of the argument if the argument is a list
Goals
Goals in order of priority:
- Tail call optimization
- Macros
- Proper error handling
- Strings
- Multi-precision numbers
- Vectors
- Structs/enums/union types
- IO (print, readline, etc.)
Dependencies
~1.5–2.4MB
~46K SLoC