Skip to content

Latest commit

 

History

History
143 lines (112 loc) · 2.77 KB

lang.md

File metadata and controls

143 lines (112 loc) · 2.77 KB

Language

Forms

Special-forms

(let sym val)

Creates a new binding of sym to the value val in the current environment.

(= sym val)

Sets the existing binding of sym to the value val; in lieu of an existing binding the global value is set.

(if cond then else ...)

If cond is true evaluates then, else evaluates elseelse and then statements can be chained to replicate the functionality of else-if blocks.

> (= x 2)
nil
> (if (is x 1) "one"
      (is x 2) "two"
      (is x 3) "three"
      "?")
two
(fn params ...)

Creates a new function.

> (= sqr (fn (n) (* n n)))
nil
> (sqr 4)
16
(mac params ...)

Creates a new macro.

> (= incr (mac (x) (list '= x (list '+ x 1))))
nil
> (= n 0)
nil
> (incr n)
nil
> n
1
(while cond ...)

If cond evaluates to true evaluates the rest of its arguments and keeps repeating until cond evaluates to nil.

> (= i 0)
nil
> (while (< i 3)
    (print i)
    (= i (+ i 1)))
0
1
2
nil
(quote val)

Returns val unevaluated.

> (quote (hello world))
(hello world)
(and ...)

Evaluates each argument until one results in nil — the last argument's value is returned if all the arguments are true.

(or ...)

Evaluates each argument until one results in true, in which case that arguments value is returned — nil is returned if no arguments are true.

(do ...)

Evaluates each of its arguments and returns the value of the last one.

Functions

(cons car cdr)

Creates a new pair with the given car and cdr values.

(car pair)

Returns the car of the pair or nil if pair is nil.

(cdr pair)

Returns the cdr of the pair or nil if pair is nil.

(setcar pair val)

Sets the car of pair to val.

(setcdr pair val)

Sets the cdr of pair to val.

(list ...)

Returns all its arguments as a list.

> (list 1 2 3)
(1 2 3)
(not val)

Returns true if val is nil, else returns nil

> (not 1)
nil
(is a b)

Returns true if the values a and b are equal in value. Numbers and strings are equal if equivalent, all other values are equal only if it is the same underlying object.

(atom x)

Returns true if x is not a pair, otherwise nil.

(print ...)

Prints all it's arguments to stdout, each separated by a space and followed by a new line.

(< a b)

Returns true if the numerical value a is less than b.

(<= a b)

Returns true if the numerical value a is less than or equal to b.

(+ ...)

Adds all its arguments together.

(- ...)

Subtracts all its arguments, left-to-right.

(* ...)

Multiplies all its arguments.

(/ ...)

Divides all its arguments, left-to-right.