LISP By Alex Stephens and Cody Owen History
LISP By Alex Stephens and Cody Owen
History LISP was designed by John Mc. Carthy of MIT in 1958; it is the second-oldest high-level programming language in widespread use today. It began as an algebraic list processing language for artificial intelligence, which is where it got its name (LISt Processing). Steve Russell coded the first LISP interpreter. It was based on the LISP function eval. Tim Hart and Michael Levin were the writers of the first successful LISP compiler. It was written in LISP.
Who is using LISP? GIMP – The GNU Image Manipulation Program GIMP is a popular free graphics editor. Scripting in GIMP is written in Scheme, a LISP dialect. Mathematical Systems, Inc Their Car Crash Database System, written in Allegro Common Lisp, “lets engineers browse… data about car crashes to design safer cars (used by Honda). ” Giga. Monkeys Consulting Software development and consulting. Owned by Peter Seibel, writer of Practical Common Lisp.
What is LISP? LISP is a multi-paradigm programming language with a focus on the functional paradigm. It was the first homoiconic programming language; the primary representation of programs is also a data structure in a primitive type of the language itself. It was the most widely-used language in artificial intelligence until the 1980 s. Most LISP implementations provide both a compiler and an interpreter.
Dialects of LISP has spawned dozens of dialects since the original LISP 1 implementation. As of today, there are two widely-used dialects of LISP, Common LISP and Scheme. Both Scheme and Common LISP fully support firstclass functions, unlike many earlier versions of LISP. Scheme is a relatively small language with a more functional flavor than Common LISP is much larger and has a large number of data types and structures.
Pure LISP is another dialect of LISP, which, as indicated by its name, is purely functional. A few more dialects: LISP 1. 5 – the earliest widely distributed version Mac. Lisp – an influential predecessor to Common LISP Clojure – a recent LISP which encourages functional programming Emacs Lisp – a LISP used by Emacs text editors Franz Lisp – its name is a pun
Syntax/Semantics In the original LISP, there were two fundamental data types, atoms and lists. Atoms are either symbols or numeric literals. Lists are sequences of atoms and other lists. Lists are stored internally as singly-linked lists. These lists are groups of linked pairs; the first element of the pair is a datum, which may be another list or an atom, and the second element of the pair points to the rest of the list. The elements of a list in LISP are separated by whitespace, and enclosed by parentheses.
Everything in LISP is written as expressions, which can be evaluated to a value. There is no distinction between expressions and statements. Both of the following expressions are valid and return the same value. (if test (+ i 1) i) (+ i (if test 1 0)) Statements, since they are expressions, only terminate by a closing parenthesis. Semicolons are used for single-line comments. #| block comments can be nested #| a comment |# |#
Example Code (defun hello () “Hello, world!” ) (defun factorial (n) (if (= n 1) 1 (* n (factorial (- n 1)))))
(lambda (x) (+ x 1)) The lambda operator creates a function. Its first operand is a list of arguments to the function. Its second operand is the expression to which the function evaluates. The above example represents a function which increments a single argument by 1. ((lambda (x) (+ x 1)) 6) evaluates to 7.
Readability Pros: Orthogonality and simplicity – everything in LISP is done by using functions calls. Cons: Polish notation (operators are in front of operands) can be confusing. Unlike many other languages, semicolons begin comments rather than concluding statements; Parenthesis stacking is notorious in LISP for causing readability issues.
Writability Pros: Using the interpreter makes writing much easier. More complex dialects like Common LISP features many useful built-in functions. LISP is homoiconic, allowing easier metaprogramming, writing programs that manipulate other programs. Cons: Same issues with readability affect writability. Mostly: Lots of Irritating Superfluous Parentheses (LISP)
Reliability Pros: Type checking and good error handling enhance reliability. Cons: LISP has very little security; functions can alter themselves as well as other functions. Aliasing negatively impacts reliability. Problems with readability and writability, specifically parenthesis stacking, affect reliability indirectly.
Cost Pros: The interpreter allows for easier debugging. LISP runs on multiple platforms. Cons: Many programmers are relatively unfamiliar with functional languages, or the awkward notations which LISP uses. As a result, training could be expensive. Most implementations of LISP which are in commercial use are somewhat costly commercial versions of LISP, such as Allegro Common Lisp, which costs at least $600.
Sources http: //en. wikipedia. org/wiki/Lisp_(programming_language) http: //www. csci. csusb. edu/dick/samples/lisp. syntax. html http: //www. cs. uwf. edu/~eelsheik/pl/lisp/evaluation. html http: //www-formal. stanford. edu/jmc/history/lisp. html http: //www. gimp. org/tutorials/Basic_Scheme/ http: //www. paulgraham. com/diff. html http: //www. wbricken. com/pdfs/02 teach/03 ai/03 -lisp-comments. pdf Concepts of Programming Languages. 9 th Ed. Sebesta, Robert W. 2010.
FIN
- Slides: 16