lisp programming languge

26
LISP Lisp Programming Language

Upload: yaser-jaradeh

Post on 25-Jan-2015

857 views

Category:

Technology


1 download

DESCRIPTION

Basic Description on the Lisp Programming Language with some history background and some practical examples with the output

TRANSCRIPT

Page 1: Lisp Programming Languge

LISP

Lisp Programming Language

Page 2: Lisp Programming Languge

LISP

What is LISP?

• A LISt Processing language

– The basic data structure is linked list and Atoms.

• A functional programming language

– Each expression in LISP is a function that returns a value

• An interpretive language

– Running LISP programs involves interacting with the LISP interpreter.

– Clisp is the common lisp interpreter available only for Linux.

– Recently Compilers have been made for this language but they are not used a lot.

Page 3: Lisp Programming Languge

LISP

History

• First developed by John McCarthy as a language for symbolic (rather than numeric) computation in 1958 based on Fortran Syntax

• Very SLOW:

– no compilation of source to machine code

– inefficient garbage collector

• Historical Reason– Most AI programs in the U.S. have been developed in LISP

– However, most AI programs in Europe have been developed in PROLOG

Page 4: Lisp Programming Languge

LISP

Terminology

•Write a program => Define a set of functions

•Running a program => Evaluating an expression

•Simple syntax: operator precedence issues eliminated

•Lists (or S-expressions) are important:•Functions are defined as lists•Lists can be manipulated easily in Lisp•Functions can be manipulated easily

Page 5: Lisp Programming Languge

LISP

Functions

• Lisp is a functional language – So everything is a function

-> Functions in other languages

var sum := sqrt(x)

Print sum

In lisp this function is:

-> (sqrt x)

• Most LISP functions require you to think and use Prefix Notation – you have to think backwards

– (print (+ 5 (sqrt 6)))

• And there are primary effects and side effects– In ‘pure’ Lisp, we ONLY get values by executing a function.

– We DON’T set a variable to a new value INSIDE a function….that is a side effect of executing a function. (You all probably do that all the time in Java or C++)

Page 6: Lisp Programming Languge

LISP How the Lisp Functions work –

The read-eval loop

• Evaluation process starts with an “S” expression (i.e., a function and operands to that function) This one adds two numbers….

(+ 3 4)

Parentheses – Notification to evaluate

Function name – Go get function (in this case ‘+’ is

the add function)

space - separator

operands -- value for function

Parentheses – stop evaluation and return the

answer

Page 7: Lisp Programming Languge

LISP

How Lisp Interpreter Works

•Programs are lisp objects (i.e. functions)•Evaluation of a lisp object returns a new object.•Evaluation is simply a function called EVAL that maps lisp objects to lisp objects:

•EVAL: object => object•we will use the symbol => to represent evaluation

•The Lisp interpreter is a loop consisting of:

•read a lisp expression•call EVAL on it•print out the result

Page 8: Lisp Programming Languge

LISP

Let’s start with the math functions

• There are many built in arithmetic functions

• You then put these arithmetic functions together

Page 9: Lisp Programming Languge

LISP

Arithmetic Functions

(+ numbers…) -- adding

(- numbers…) -- subtracting

(* numbers…) -- multiplication

(/ numbers…) -- division

(1+ number) – plus 1 (this is hard to read)

(1- number) – minus 1

(abs number) etc…..

(acos number)

Page 10: Lisp Programming Languge

LISP

Examples:

Page 11: Lisp Programming Languge

LISP

Atoms

• Atoms:

– Number

» examples: 3, 8.9, etc.

– Symbol

» An object written as a sequence of characters

» Symbols are usually manipulated as names that are “bound” to other lisp objects

• Symbol FOO might be bound to 4.2

Page 12: Lisp Programming Languge

LISP

Lists

•Lists :•Anything with parentheses around it.•()•(a)•(this is one too)•(a list of (two) lists)•(a (very (very (very (inscrutable) list)))

Page 13: Lisp Programming Languge

LISP

A Special Symbol: NIL

• NIL represents an empty list.

• NIL is a terminator of a list.

• A list is usually built by inserting its elements into NIL in the reverse order .

• NIL can also represent “false''.

• The special symbol representing “true” is T.

Page 14: Lisp Programming Languge

LISP

Taking lists apart

• (first <a list>) returns the first element of the list.

• (rest <a list>) returns the remaining list (i.e., everything except the first element).

Page 15: Lisp Programming Languge

LISP

Quote

• Quote symbol ‘ is a short hand for the function called QUOTE.

• (QUOTE <arg>)

• QUOTE is a special function that prevents LISP from evaluating its argument.

• QUOTE returns the argument literately.

Example: (quote (dummy-fn 2))

==> (DUMMY-FN 2)

Page 16: Lisp Programming Languge

LISP

Basic Evaluation Rules

• A number evaluates to itself

• A symbol evaluates to its value.

• A list is evaluated by

– treating the first element as a function

– evaluating each arguments of the function in a left-to-right order

• An expression preceded by a quote symbol ‘ evaluates to the expression itself.

Page 17: Lisp Programming Languge

LISP

Assignment and Binding

• A symbol (or variable) can be assigned a value (called its binding) using SETQ.

• (SETQ <symbol-name> <anything>)

Example: (SETQ A ‘(A B C)) ==> (A B C)

A evaluates to ==> (A B C)

• Evaluating a symbol that does not have a value assigned (i.e., no binding) causes error

Page 18: Lisp Programming Languge

LISP

All other functions do NOT change the bindings

• In particular, FIRST and REST are non-destructive.

> (setq my-friends ‘(Superman Batman Robin) )

(Superman Batman Robin)

> (first (rest my-friends))

Batman

> my-friends

(Superman Batman Robin)

Page 19: Lisp Programming Languge

LISP

Defining My-Own Functions

• A function is defined using DEFUN

• (DEFUN <fn-name> (<arg1> ...<argK>) <exp1> ... <expN> )

• All arguments are passed by value.

• The body of the function may contain any number of expressions (i.e., function calls).

• The function returns the value returned by the last expression.

Page 20: Lisp Programming Languge

LISP

Defining A Function

(defun square (x)

(times x x) )

(defun add-friend (new-friend friends)

(cons new-friend friends) )

Page 21: Lisp Programming Languge

LISP

Predicates – Checking to see if something is true….

• Functions that return ``true’’ (i.e., T) or ``false’’ (i.e., NIL).

type-testing predicates

• (NULL <item>) returns T if <item> is NIL (empty list), otherwise NIL.

• (LISTP <item>) returns T if <item> is a list, otherwise NIL.

• (ATOM <item>) returns T if <item> is an atom (i.e., a symbol, a number, or NIL).

• (NUMBERP <item>) returns T if <item> is a number

Page 22: Lisp Programming Languge

LISP

Conditional Expression

• COND is an N-branch conditional expression(COND ( <test1> <exp11> ... <exp1L> ) ( <test2> <exp21> ... <exp2M> ) ... ( <testK> <expK1> ... <expKN> ) )• Each test is evaluated sequentially until a test

returns true.• Expressions following that test will be

executed.• COND returns the value returned by the last

expression associated with the test.

Page 23: Lisp Programming Languge

LISP Terminates a COND with a T

condition(defun select-character (enemy) (cond ( (equal enemy ‘Penguin) ‘Batman) ( (equal enemy ‘Catwoman) ‘J-Bond ) ( (equal enemy ‘Black-Knight) ‘(White-Knight King-Arthur ) ) ( T ; for all other enemies ‘SuperMan) ; ask Superman for help ))

Page 24: Lisp Programming Languge

LISP

Using AND, OR in COND(defun Evaluate-feeling ( sentence )

(cond ( (OR (member ‘hate sentence)

(member ‘dislike sentence))

‘hatred)

( (AND (member ‘I sentence)

(member ‘feel sentence) )

‘self-centered )

( T

‘happy)

) ; end of cond

) ; end of defun

Page 25: Lisp Programming Languge

LISP

Loops

i=1, while i <= 3: => (loop for i in ‘(1 2 3) do (print i)) 1 2 3 i=1, while i <= 3: (different step) => (loop for i from 1.0 to 3.0 by 0.5 do (print i))

i=3, while i >= 1: => (loop for i from 3 downto 1 do (print i)) 3 2 1

Page 26: Lisp Programming Languge

LISP

Conclusion

Things to remember:

•Lisp is considered the mother of a lot of functional languages like Scheme and Haskell …..•Common Lisp has dynamic type checking•Lisp is interpreted.

The reason why Lisp is dead:•Stock hardware platforms becoming faster than special purpose hardware•Low Interoperability with other languages