hello friends! new(ish)!
Lisp: Difference between revisions
>Ebin |
>Ebin (→Lambda) |
||
Line 9: | Line 9: | ||
In most Lisps and functional languages Lambda is the constructor of un-named or anonymous procedures and functions. | In most Lisps and functional languages Lambda is the constructor of un-named or anonymous procedures and functions. | ||
(defun | (defun n-times (n) | ||
(lambda (x) | |||
(* n x))) | |||
In this example the anonymous procedure, or lambda form, multiplies its argument by | In this example the anonymous procedure, or lambda form, multiplies its argument by a value that is assigned when the Lambda is created, its use can be observed below with the use of MAPCAR, which applies the unnamed procedure generated to each of the elements of a list: | ||
> ( | > (mapcar (n-times 2) '(1 2 3 4 5 6 7 8 9 10)) | ||
(2 4 6 8 10 12 14 16 18 20) | (2 4 6 8 10 12 14 16 18 20) | ||
Its use by itself can be observed as such: | Its use by itself can be observed as such: | ||
> ((lambda ( | > ((lambda (x) (* 2 x)) 5) | ||
10 | 10 | ||
Revision as of 19:20, 12 November 2014
Lisp is a programming language originally created by John McCarthy in 1958. Despite its age, it is still a popular choice for modern programmers. Lisp has proven itself flexible enough to evolve to meet the needs of modern programmers. Modern implementations often come "batteries-included", meaning that the programmer has access to powerful libraries for databases, regular expressions, networking, and more.
Lisp comes in different dialects, which are divided into different implementations. Three important dialects are Common Lisp, Emacs Lisp, and Scheme.
Important Concepts
Symbols
Lists
Lambda
In most Lisps and functional languages Lambda is the constructor of un-named or anonymous procedures and functions.
(defun n-times (n) (lambda (x) (* n x)))
In this example the anonymous procedure, or lambda form, multiplies its argument by a value that is assigned when the Lambda is created, its use can be observed below with the use of MAPCAR, which applies the unnamed procedure generated to each of the elements of a list:
> (mapcar (n-times 2) '(1 2 3 4 5 6 7 8 9 10)) (2 4 6 8 10 12 14 16 18 20)
Its use by itself can be observed as such:
> ((lambda (x) (* 2 x)) 5) 10
Higher Order Procedures
Recursion
Natural Recursion
Proper Tail Recursion
Homoiconicity
Macros
Compile-time Macros
Read Macros
FEXPRs
Scoping
Functions
Dialects
Common Lisp
Common Lisp was designed by Scott Fahlman, Richard P. Gabriel, David Moon, Guy L. Steele, and Dan Weinreb, and is described in CLTL2, as well as the Common Lisp Hyperspec.
Popular implementations include Steel Bank Common Lisp, GNU Clisp, ClozureCL, and ECL.
Emacs Lisp
Emacs Lisp (Elisp) is used to program and extend Emacs. Programmers who either use or are interested in using Emacs should learn Elisp.
A very good tutorial, as well as primary langugage documentation for Elisp is available from directly within Emacs.
The introduction can by found by pressing C-h i
then typing mEmacs Lisp Intro
and pressing Return
, and the language documentation can be found by typing mElisp
instead. (the "m" tells Info that you are looking for a menu entry, and the rest is the title)
Scheme
Scheme, created by Guy L. Steele and Gerald Jay Sussman, is the dialect used in SICP.
Two of the most popular implementations are Chicken and GNU Guile, both of which are embeddable, and include a well-designed C API, and an FFI for interfacing with C libraries.
Niche Lisps
System scripting
- LUSH
- newLISP
- Picolisp
- scsh
CUDA & OpenCL
- Harlan
Programming language research
- GNU Epsilon
- Kernel (implementation here)
- Racket