LISP[转载]

来源:互联网 发布:js防水涂料 执行标准 编辑:程序博客网 时间:2024/06/05 00:27

http://baike.baidu.com/view/293795.htm

 

 

  LISP(全名LISt Processor,即链表处理语言),由约翰·麦卡锡在1960年左右创造的一种基于λ演算的函数式编程语言。

  LISP有很多种方言,各个实现中的语言不完全一样。各种LISP方言的长处在于操作符号性的数据和复杂的数据结构。1980年代Guy L. Steele编写了Common Lisp试图进行标准化,这个标准被大多数解释器编译器所接受。在Unix/Linux系统中,还有一种和Emacs一起的Emacs Lisp(而Emacs正是用Lisp编写的)非常流行,并建立了自己的标准。
  LISP的祖先是1950年代Carnegie-Mellon大学的Newell、Shaw、Simon开发的IPL语言。
  LISP语言的主要现代版本包括Common Lisp和Scheme
  1 基本介绍
  Lisp的表达式是一个原子(atom)或表(list),原子(atom)是一个字母序列,如abc;表是由零个或多个表达式组成的序列,表达式之间用空格分隔开,放入一对括号中,如:
  abc
  ()
  (abc xyz)
  (a b (c) d)
  最后一个表是由四个元素构成的,其中第三个元素本身也是一个表。
  正如算数表达式1+1有值2一样,Lisp中的表达式也有值,如果表达式e得出值v,我们说e返回v。如果一个表达式是一个表,那么我们把表中的第一个元素叫做操作符,其余的元素叫做自变量。
  Lisp的7个公理(基本操作符):
  (quote x)返回x,我们简记为'x
  (atom x)当x是一个原子或者空表时返回原子t,否则返回空表()。在Lisp中我们习惯用原子t表示真,而用空表()表示假。
  > (atom 'a)
  t
  > (atom '(a b c))
  ()
  > (atom '())
  t
  现在我们有了第一个需要求出自变量值的操作符,让我们来看看quote操作符的作用——通过引用(quote)一个表,我们避免它被求值。一个未被引用的表达式作为自变量,atom将其视为代码,例如:
  > (atom (atom 'a))
  t
  反之一个被引用的表仅仅被视为表
  > (atom '(atom 'a))
  ()
  引用看上去有些奇怪,因为你很难在其它语言中找到类似的概念,但正是这一特征构成了Lisp最为与众不同的特点——代码和数据使用相同的结构来表示,而我们用quote来区分它们。 (eq x y)当x和y的值相同或者同为空表时返回t,否则返回空表()
  > (eq 'a 'a)
  t
  > (eq 'a 'b)
  ()
  > (eq '() '())
  t
  (car x)要求x是一个表,它返回x中的第一个元素,例如:
  > (car '(a b))
  a
  (cdr x)同样要求x是一个表,它返回x中除第一个元素之外的所有元素组成的表,例如:
  > (cdr '(a b c))
  (b c)
  (cons x y)要求y是一个表,它返回一个表,这个表的第一个元素是x,其后是y中的所有元素,例如:
  > (cons 'a '(b c))
  (a b c)
  > (cons 'a (cons 'b (cons 'c ())))
  (a b c)
  2 Common LISP的Hello World程序
  下面是一个在标准输出设备上输出Hello World的简单程序,这种程序通常作为开始学习编程语言时的第一个程序:
  (format t "Hello, world!~%")
原创粉丝点击