Term

Definition

Example

Atoms

Like types: the fundamental items formed from bits

27, 3.14, This-Phrase

Lists

Sentence like objects containing atoms or other lists.

'(this that the other thing)

Symbolic expressions / or [s-]expressions

Atoms and lists collectively are called expressions.

setf

(setf [<name> <list>]*) is an assignment of <list> to <name>

(setf friends '(Dan Randy) enemies '(Satan))

Data Types

See Figure 1

FIRST

(FIRST LIST) returns the first expression in the list

(FIRST (A B C)) --> A

REST

(REST LIST) returns the expression after the first element of the list as a list

(REST (A B C)) --> (B C)

QUOTE

'(I J) will return a list with the elements I and J without trying to interpret I as a function

'(A B C) --> (A B C)

CARs CDRs

CAR == first, CDR == rest. Add a's or d's to string them to gether CADR == first rest

(CADR '(A B C)) --> B

True and False

T and NIL

CONS

(CONS <exp> <list>) --> LIST == (exp list[1] ... list[n]) that is the contents of the list

(CONS 'a '(b c)) --> (a b c)

APPEND

(APPEND list list*) --> (content contents1 ... contentsn)

(append '(a b c) '(a e f)) --> (a b c a e f)

LIST

(LIST <exp>*) --> (exp1 ... expn)

(LIST 'a 'b 'c) --> (a b c)

NTHCDR

(NTHCDR <number> <list>) trims off the first <number> items from the list and returns the rest

(NTHCDR 2 '(a b c)) --> (c)

BUTLAST

(BUTLAST <number> <list>) trims off the last <number> itmes from the list and returns the rest

(BUTLAST 2 '(a b c)) --> (a)

LAST

(LAST <list>) --> (last-element) as a list

(LAST '(a b c)) --> (c)

LENGTH

(LENGTH <list>) --> number of items in the list

(LENGTH '(a b c)) --> 3

REVERSE

(REVERSE <list>) --> reverses the order of the list

(REVERSE '(a b c)) --> (c b a)

Association list / a-list

A list of sublists where the first element in each sublist is used as a key for recovering the entire list.

(setf Patti '((height 5-10) (weight 124))) where height and weight are the keys

ASSOC

Is a way to access a-lists (ASSOC <key> <a-list>)

(ASSOC 'weight Patti) --> 124

FLOAT

Forces a float result (FLOAT <exp>) --> float-value

(float (/ 22 7)) --> 3.14286 vs. (/ 22 7) --> 22/7 which is a ratio

ROUND

(ROUND <exp>) --> int remainder

(round (/ 22 7)) --> 3 1/7

MAX

(MAX <list>) --> max element in list

(max '(1 2 3)) --> 3

MIN

(MIN <list>) --> min element in list

similar

EXPT

Stand for exponent (expt number1 number2) --> number1^number2

(expt 2 3) --> 8

bind

means to reserver a place in memory - this is similar to definition in other languages

no example

form

???

???

DEFUN

(DEFUN <name> (parem-list) <form>)

(defun bothends (whole-list) (cons (first whole-list) (last whole-list)))

pass by value

Values passed in as params are passed by value. All other values can be changed.

LET

(let ((<param_1> <init-val_1>) ... (<param_n> <init-val_n)) <form_1> ... <form_m>) Let is said to evaluate it initial value formes in parallel because all initial value formes are evaluated before the fence for eht LET is builtand before any of the LET's parameters are bound

See Figure 2 for an example

Comments

Use the semicolon twice ;;

;;this is a comment

EQUAL

(EQUAL <exp1> <exp2>) --> {T, NIL}

(equal '(a b) '(a b)) --> T (equal '(a b) 'c) --> NIL

EQL

Are two argument values the same symbol or number?

EQ

Are two argument values the same symbol

=

Are two argument values the same number

MEMBER

(MEMBER <exp> <list>) returns true if <exp> is a member of the list. Member tests using EQL

(MEMBER '(a b) '((a b) (c d))) --> true

:KEYWORD

Any symbol beginning with a : is a keyword. we can insert :test #'equal to force the test type in MEMBER

(member '(maple shade) pairs :test #'equal)

Procedure Name/Object

Procedure name is the actual handle we use such as EQUAL. The proceduce object is the code that actually performs the computation.

See Lisp p 52

LISTP

(LISTP <exp>) --> T if <exp> is a list

ATOM

(ATOM <exp>) --> T if <exp> is an atom

NUMBERP

(NUMBERP <exp>) --> T if <exp> is a number

SYMBOLP

(SYMBOLP <exp>) --> T if <exp> is a symbol

NIL == ()

NULL

(NULL <exp>) --> T if <exp> is an empty list or NIL

ENDP

(ENDP <exp>) --> T if <exp> is a list and its an empty list

ZEROP

Is it zero?

(ZEROP 0) --> T

PLUSP

Is it positive

(PLUSP 3) --> T

MINUSP

Is it negative

(MINUSP -3) --> T

EVENP/ODDP

is it even or odd

(EVENP 2) --> T (ODDP 2) --> NIL

>, <

...

(< 3 4) --> T

AND/OR

(AND/OR <exp1> ... <expn>) --> {T,NIL} uses short circuit evaluation always

NOT

(NOT <exp>) --> {T,NIL}

IF

(IF <test> <then form> <else form>)

WHEN

(WHEN <test> <then from>)

UNLESS

(UNLESS <test> <else form>)

COND

(COND (<test_1> <consequent 1>*)*) uses short circuit evaluation - it will only evaluate one. You should have the last one equal T as a sort of otherwise condition.

|| CASE ||||<(> (CASE <key form> ( <key 1> <consequent 1>* )* uses EQL to compare, case returns NIL if nothing is triggered, T or OTHERWISE can be used for the default.

                               |Integer
                               |
                     |Number---|Ratio
                     |         |
                     |         |Floating Point
             |Atom---|
             |       |
Expressions -|       |Symbol
             |
             |
             |       |Empty List
             |List---|
                     |Cons

Figure 1

  (setf x 'outside)
  (let ((x 'inside)
        (y x))
    (list x y)
  )

(INSIDE OUTSIDE)

//NOTE y gets the value of x outside the fence for the LET.

Figure 2

LispNotes (last edited 2006-01-18 19:29:29 by velociraptor)