Use of symbolic expressions. Three types of objects : atoms (truc, 1234, *hello*, etc.), lists (sequences of atoms within parens separated by spaces) and strings (aka not the underwear). Stuff’s cas insensitive. Variables are not typed, but objects are.
; Comments are made with semi-colons. Example : (+ (* (/ 9 5) 60) 32) ; == (60 * 9 / 5) + 62)
Basics
(f x) ; == f(x)
(* 1 [0]), (+ 1 [0]), (- 1 [0]), (/ 1 [0]), (sqrt 1), (expt 1 2), (min 1 [0]), (max 1 [0]), (abs 1), (mod 1), (round 1), (sin 1), (cos 1), (tan 1)
t ; True, Nil ; False, '(stuff) ; Raw input
Lists
'(A B C [0])
(first [L]), (second [L]), ..., (tenth [L]), (nth N [L]), (rest [L]) ; == [L].tail, (last [L]), (length [L]), (car [L]) ; == (first [L]), (cdr [L]) ; == (rest [L])
(cons A [L]) ; == A :: [L], (append [L] [L]) ; == [L] ++ [L], (list [0]) ; create list
Predicates
Type-checking. Return T if same type, NIL if not. Format: (stuffp 1) == 1 typeoff stuff.
(listp 1), (numberp 1), (integerp 1), (stringp 1), (evenp 1), (oddp 1)
(atom 1) ; == not a string nor a list, (= 1 [0]), (> 1 [0]), (< 1 [0]), (<= 1 [0]), (>= 1 [0]), (/= 1 [0]), (null [L]) ; == isEmpty, (equal [L] [L]), (eql 1 2) ; == (1 == 2), (not 1), (and 1 [0]), (or 1 [0])
Var and flow
(setq foo bar) ; == (var foo = bar), (setf foo bar) ; == setq, '(stuff)
(defun name (args) body) ; == def name(args) {body}
(if cond then [else]) ; == if(cond) then else
(cond (test1 result1) [(testn resultn)]) ; == When there is a T, return the corresponding result and stops.
(progn (stuff1) [(stuffn)]) ; Do every stuffs and returns the value of the last stuff.
(loop ...) ; Do NOT use.
Misc
(load name) ; Load and evaluate the file name.
(print stuff) ; Prints stuff and returns the value of stuff.
Example: Factorial
(defun fact (n) (if (not (integerp n)) "Invalid argument" (if (< n 2) 1 (* n (fact (- n 1))) ) ) )