Reference
Notation rules
- Elements in
[]
are optional - A quoted symbol means that it is evaluated
Summary
Structural comparisons
Name | Syntax | Module | Description |
---|---|---|---|
= |
(= 'any 'any) |
logic |
Equality |
<> |
(<> 'any 'any) |
logic |
Inequality |
Numeric comparison
Name | Syntax | Module | Description |
---|---|---|---|
< |
(< 'num 'num) |
math |
Less-than |
<= |
(<= 'num 'num) |
math |
Less-than-or-equal-to |
> |
(> 'num 'num) |
math |
Greater-than |
> |
(>= 'num 'num) |
math |
Greater-than-or-equal-to |
Arithmetic operations
Name | Syntax | Module | Description |
---|---|---|---|
+ |
(+ 'num 'num) |
math |
Addition |
- |
(- 'num 'num) |
math |
Subtraction |
* |
(* 'num 'num) |
math |
Multiplication |
/ |
(/ 'num 'num) |
math |
Division |
% |
(% 'num 'num) |
math |
Modulo |
Logical operations
Name | Syntax | Module | Description |
---|---|---|---|
and |
(and 'any 'any) |
logic |
Logical AND |
not |
(not 'any) |
logic |
Logical NOT |
or |
(or 'any 'any) |
logic |
Logical OR |
Predicates
Name | Syntax | Module | Description |
---|---|---|---|
chr? |
(chr? 'any) |
std |
Return T if any is a character |
lst? |
(lst? 'any) |
std |
Return T if any is a list |
nil? |
(nil? 'any) |
std |
Return T if any is NIL |
num? |
(num? 'any) |
std |
Return T if any is a number |
str? |
(str? 'any) |
std |
Return T if any is a string |
sym? |
(sym? 'any) |
std |
Return T if any is a symbol |
tru? |
(tru? 'any) |
std |
Return T if any is T |
String operations
Name | Syntax | Module | Description |
---|---|---|---|
ntoa |
(ntoa 'num) |
Convert num into a string |
|
join |
(join 'lst 'chr) |
Join lst of strings into a chr -separted string |
|
split |
(split 'str 'chr) |
Split str of chr -separted tokens |
|
str |
(str 'sym) |
std |
Make a string out of sym |
trim |
(trim 'str) |
Trim str of leading and trailing white spaces |
Symbol definition
Name | Syntax | Module | Description |
---|---|---|---|
def |
(def sym args [str] prg) |
std |
Define a function |
let |
(let lst . prg) |
std |
Let-binding symbols |
<- |
(setq sym 'any) |
std |
Update an existing symbol |
setq |
(setq sym 'any) |
std |
Bind a symbol |
sym |
(sym 'str) |
std |
Make a symbol out of str |
List manipulation
Name | Syntax | Module | Description |
---|---|---|---|
append |
(append 'lst . any) |
Recursively append any to lst |
|
car |
(car 'lst) |
std |
Get the head element of lst |
cadr |
(cadr 'lst) |
manips |
Get the 2nd element of lst |
cddr |
(cddr 'lst) |
manips |
Get the tail of the tail of lst |
caddr |
(caddr 'lst) |
manips |
Get the 3rd element of lst |
cadddr |
(cadddr 'lst) |
manips |
Get the 4th element of lst |
caar |
(caar 'lst) |
manips |
Get the 1st element of the head of lst |
cadar |
(cadar 'lst) |
manips |
Get the 2nd element of the head of lst |
cdar |
(cdar 'lst) |
manips |
Get the tail of the head of lst |
cdr |
(cdr 'lst) |
std |
Get the tail of lst |
chr |
(chr 'num) |
std |
Get the character for ASCII numner num |
conc |
(conc 'lst 'lst) |
std |
Concatenate two lists into one |
cons |
(cons 'any 'any) |
std |
Construct a pair |
filter |
(filter 'fun 'lst) |
Filter lst using fun |
|
flatten |
(flatten 'lst) |
Flatten a nested lst |
|
foldl |
(foldl 'fun 'acc 'lst) |
Left-fold a lst |
|
foldr |
(foldr 'fun 'lst 'acc) |
Right-fold a lst |
|
insert |
(insert 'fun 'any 'lst) |
Insert any into a sorted lst using fun |
|
iter |
(iter 'fun 'lst) |
Iterate over the elements of a list | |
last |
(last 'lst) |
Return the last element of a list | |
len |
(len 'lst) |
std |
Compute the length lst |
list |
(list 'any ...) |
std |
Create a list with any |
map |
(map 'fun 'lst) |
Map the content of lst |
|
map2 |
(map2 'fun 'lst 'lst) |
Map the content of a two lists | |
merge |
(merge 'fun 'fun 'lst 'lst) |
Sorted and deduped merge of two lists | |
rev |
(rev 'lst) |
Reverse lst |
|
zip |
(zip 'lst 'lst) |
Sequentially pair-up elements from two lists |
Assoc-list operations
Name | Syntax | Module | Description |
---|---|---|---|
assoc |
(assoc 'any 'lst) |
Query an association list | |
erase |
(erase 'any 'lst) |
Remove an entry in an association list | |
replc |
(replc 'any 'any 'lst) |
Replace an entry in an association list |
Control flow
Name | Syntax | Module | Description |
---|---|---|---|
|> |
(|> any0 [any1] ...) |
std |
Fluent composition |
cond |
(cond 'any ...) |
std |
Predicate matching |
if |
(if 'any then [else]) |
std |
If construct |
match |
(match 'any ...) |
std |
Structural matching |
prog |
(prog any0 [any1] ...) |
std |
Sequential composition |
unless |
(unless 'any . prg) |
std |
Execute prg unless any is not NIL |
when |
(when 'any . prg) |
std |
Execute prg if any is not NIL |
while |
(while 'any . prg) |
std |
Execute prg while any is not NIL |
Input/output operations
Name | Syntax | Module | Description |
---|---|---|---|
in |
(in 'any . prg) |
io |
In stream |
out |
(out 'any . prg) |
io |
Out stream |
prin |
(prin 'any ...) |
io |
Symbolic print of a list of any |
prinl |
(prinl 'any ...) |
io |
Symbolic print of a list of any , with new line |
print |
(print 'any ...) |
io |
Literal print of a list of any |
printl |
(printl 'any ...) |
io |
Literal print of a list of any , with new line |
read |
(read) |
io |
Read a token from the current input stream |
readline |
(readline) |
io |
Read one line from the current input stream |
Core operations
Name | Syntax | Module | Description |
---|---|---|---|
eval |
(eval 'any) |
std |
Evaluate any |
load |
(load str) |
std |
Load an external asset |
time |
(time prg) |
sys |
Time the execution of prg |
quit |
(quit) |
std |
Quit the interpreter loop |
quote |
(quote . any) |
std |
Quote any |
Socket functions
Name | Syntax | Module | Description |
---|---|---|---|
accept |
(accept 'num) |
unix |
Accept a connection from server descriptor num |
connect |
(connect 'dns 'svc) |
unix |
Connect to dns on service port svc |
listen |
(listen 'num) |
unix |
Listen for connections on port num |
System functions
Name | Syntax | Module | Description |
---|---|---|---|
close |
(dup 'num) |
unix |
Close a file descriptor num |
dup |
(dup 'num ['num]) |
unix |
Duplicate a file descriptor num |
exec |
(exec 'str 'lst 'lst) |
unix |
Execute an image at path with arguments and environment |
fork |
(fork) |
unix |
Fork the current process |
run |
(run 'str 'lst 'alst) |
Run a external program str |
|
select |
(select 'fds 'rcb 'ecb) |
unix |
Wait for available data on descriptors fds |
unlink |
(unlink 'str) |
unix |
Unlink the file pointed by str |
wait |
(wait 'num) |
unix |
Wait for PID num |
Detailed description
ASSOC
Invocation
(assoc 'any 'lst)
Description
Look-up any
in the association list lst
.
Return value
If a value is bound to any
, return that value. If not, return NIL
.
Example
: (assoc 'hello '((hello . world)))
> world
: (assoc 'foo '((hello . world)))
> NIL
CONC
Invocation
(conc 'lst1 'lst2)
Description
Destructively concatenate two lists lst1
and lst2
into a single list.
Return value
If lst1
is a list, return the concatenation of lst1
and lst2
. The value
pointed by lst1
is actually modified. If lst1
is not a list, return NIL
.
Example
: (setq A '(1 2))
> (1 2)
: (conc A '(3 4))
> (1 2 3 4)
: A
> (1 2 3 4)
COND
Invocation
(cond 'any (any . prg) (any . prg) ...)
Description
Evaluate any
and use the car
of the remaining arguments as a predicate over
the result. Return the evaluation of the first positive match. The default or
catch all case is written using the special value _
as car
.
Order is important. If multiple match exist, the first one is evaluated. If _
is placed before a valid match, _
is evaluated.
Return value
If a match is made, returns the evaluation of the corresponding prg
. If no
match is made, return NIL
.
Example
: (def test (v) (cond v (num? . 'number) (lst? . 'list) (_ . 'unknown)))
> test
: (test 1)
> number
: (test '(1 2))
> list
: (test T)
> unknown
CONS
Invocation
(cons 'any1 'any2)
Description
Construct a new list using the first argument for car
and the second argument
for cdr
.
Return value
Return the newly constructed list without modifying the arguments.
Example
: (cons 1 2)
> (1 . 2)
: (cons 1 (cons 2 3))
> (1 2 . 3)
DEF
Invocation
(def sym lst [str] prg ...)
Description
Define a function with arguments args
and body prg
and associate it with
the symbol sym
. An optional str
can be specified as a documentation string
and is ignored by the interpreter.
Function defined with the def
keyword are simply lambda functions assigned to
symbol. The following expressions are equivalent:
: (def add (a b) (+ a b))
> add
: (setq add (\ (a b) (+ a b)))
> (\ (a b) (+ a b))
Return value
Return the S-expression of the newly defined function.
Example
: (def add (x y) (+ x y))
> ((x y) NIL NIL (+ x y))
EVAL
Invocation
(eval 'any)
Description
Evaluate any
.
Return value
Return the result of the evaluation.
Example
: (eval (list '+ 1 1))
> 2
IF
Invocation
(if 'any . lst)
Description
When any
evaluates to T
, evaluate (car lst)
. Otherwise, evaluate
(car (cdr lst))
.
Return value
Return the result of the evaluation.
Example
: (def test (v) (if (> v 10) (* v 2)))
> test
: (test 5)
> NIL
: (test 20)
> 40
IN
Invocation
(in 'any . prg)
Description
Create a new input channel context and evaluate prg
within that context. The
previous context is restored after the evaluation.
When the first argument evaluates to NIL
, the context uses stdin
. When the
argument evaluates to a string, in
assumes the string contains a file path and
tries to open that file.
Return value
Return the evaluation of prg
.
LET
Invocation
(let lst . prg)
Description
Evaluate prg
within the context of the bind list lst
. The bind list has the
following format:
((any . 'any)(any . 'any)...)
Return value
Return the value of the evaluated prg
.
Example
: (let ((lhv . (+ 1 2)) (rhv . (+ 3 4))) (+ lhv rhv))
> 10
LIST
Invocation
(list 'any ...)
Description
Create a list with any
arguments.
Return value
Return the newly created list.
Example
: (list)
> NIL
: (list (+ 1 1) 3 "a")
> (2 3 "a")
LOAD
Invocation
(load 'str ...)
(load '(mod sym ...))
(load 'sym ...)
(load '(mod . T))
Description
In the first form, load the lisp
file pointed by str
. If the path is
prefixed by @lib
, load
will look for the file in the lib
directory of the
installation prefix.
: (load "@lib/cadr.l")
> ((x) NIL NIL (car (cdr x)))
In the second form, load sym
in the module mod
. In the third and fourth
forms, all symbols in the module mod
are loaded.
: (load '(math +))
> (+)
Modules are searched in the lib/mnml
directory of the installation prefix or
in the MNML_MODULE_PATH
environment variable.
Return value
In the first form, return the result of the last evaluated operation in the
list. In the second and third form, return the list of loaded symbols. On error,
NIL
is returned.
Example
: (load "lisp/cadr.l")
> ((x) NIL NIL (car (cdr x)))
MATCH
Invocation
(match 'any (any . prg) ...)
Description
Evaluate any
and use the car
of the remaining arguments as a structural
template for the result. The
default or catch all case is written using the special value _
as car
.
Order is important. If multiple match exist, the first one is evaluated. If _
is placed before a valid match, _
is evaluated.
Return value
Return the evaluation of the first positive match. Return NIL
otherwise.
Example
: (prinl (match '(1 2 3) ((1 _ _) . "OK") (_ . "KO")))
OK
> (^O ^K)
OUT
Invocation
(out 'any . prg)
Description
Create a new output channel context and evaluate prg
within that context. The
previous context is restored after the evaluation.
When the first argument evaluates to NIL
, the context uses stdout
. When the
argument evaluates to a string, out
assumes the string contains a file path
and tries to open that file.
If the file does not exist, it is created. If the file exists, it is truncated.
If the file path is prepended with a +
the file must exist and data will be
appended to it.
Return value
Return the evaluation of prg
.
Example
: (out "test.log" (prinl "Hello, world"))
> (^H ^e ^l ^l ^o ^, ^ ^w ^o ^r ^l ^d)
PRIN
Invocation
(prin 'any ...)
Description
Print the string representation of any
. When multiple arguments are printed,
no separator is used.
Return value
Return the result of the evaluation of the last argument. If there is no
argument, return NIL
.
Example
: (prin "hello, " "world!")
hello, world!> "world!"
PRINL
Invocation
(prinl 'any ...)
Description
Calls prin
and appends a new line.
Return value
Return the result of the evaluation of the last argument. If there is no
argument, return NIL
.
Example
: (prinl "hello, " "world!")
hello, world!
> "world!"
Invocation
(print 'any ...)
Description
Print the S-expression of any
. When multiple arguments are printed, a
space separator is used.
Return value
Return the result of the evaluation of the last argument. If there is no
argument, return NIL
.
Example
: (print 'a 'b '(1 2 3))
a b (1 2 3)> (1 2 3)
PRINTL
Invocation
(printl 'any ...)
Description
Calls print
and appends a new line.
Return value
Return the result of the evaluation of the last argument. If there is no
argument, return NIL
.
Example
: (print 'a 'b (1 2 3))
a b (1 2 3)
> (1 2 3)
PROG
Invocation
(prog prg1 prg2 ...)
Description
Evaluate prg1
, prg2
, ..., in sequence.
Return value
Return the the result of the last evaluation.
Example
: (prog (+ 1 1) (+ 2 2))
> 4
READ
Invocation
(read)
Description
Read a token from the current input stream. The current input stream differs depending on the context:
- When run interactively, the current input stream is
stdin
- When executing a file, or as a shebang interpreter, the current input stream is that of the file
The current input stream is also altered by the in
command.
Return value
Return a valid token or NIL
if the stream is closed or invalid.
READLINE
Invocation
(readline)
Description
Read one line from the current input stream. Stop on EOF
.
Return value
Return a line as a string trimmed of any carry return. NIL
in case of EOF
.
RUN
Invocation
(run 'str 'lst 'alst)
Description
Run an external program at path str
with arguments lst
and environment
alst
. If alst
is NIL
, the current environment ENV
is used instead.
This function combines fork
, exec
, dup
, close
, pipe
, and wait
to
provide a handy way to run external binaries in a single shot.
Return value
Return a pair with CAR
as the status code of the binary and CDR
the
output of the command as list of lines.
Example
: (run "/bin/hostname" NIL NIL)
> (0 (^E ^n ^c ^e ^l ^a ^d ^u ^s))
SET
Invocation
(<- 'sym 'any)
Description
Associate any
with the symbol sym
. The symbol must exist.
Return value
Return the previous value associated to the symbol.
Example
: (setq A (+ 1 2))
> 3
: (<- 'A 4)
> 3
: A
> 4
SETQ
Invocation
(setq sym 'any)
Description
Associate any
with the symbol sym
.
Return value
Return the value associated to the symbol.
Example
: (setq A (+ 1 2))
> 3
STREAM
Invocation
(|> any0 [any1] ...)
Description
Fluent composition operator. Evaluate any0
and pass the result to any1
, and
so on until the end of the list.
Return value
Return the result of the last any
operation.
Example
: (|> '(1 2 3) cdr car)
> 2
TIME
Invocation
(time prg)
Description
Compute the execution time of prg
.
Return value
Return the computed time, in nanoseconds. If prg
is NIL
, return the current
timestamp.
Example
: (time (+ 1 2))
> 8433
: (time)
862596451378329