因 AI 而设计的语言 LISP

前言(Lisp 可以做别人告诉你不可能做的事)

LISP(List Processing)由来自麻省理工学院的人工智能研究先驱 约翰·麦卡锡(John McCarthy)在1958年基于 「λ演算」 所创造,采用抽象数据列表与递归作符号演算来衍生人工智能。

创造力

语言是和人相关的,真正有创造力的人不多,大部分人都是应用。语言的核心人物如果不创造出来方便普通人应用的基础,那么就没人用这个语言了。虽然 Lisp 中不缺乏共享资源,但让普通人容易使用的不多,有探索精神的人在人群中比例是很小的,大部分人一听说 Lisp 用的少,就把 Lisp 剔除了。

语言和时代

Lisp 有其辉煌的历史,但时代跟 Lisp 开了个玩笑。十几年前估计没几个人看好 Javascript,可是 Javascript 现在却风生水起。Lisp 同样会像 Javascript 一样由于时代的不同,而重新被人认知。(这点是存在争议的,我会在另一篇文章中说明争议性

抽象世界和现实世界

Lisp 几乎不是一门语言,而是可以构造一个世界的规则。Lisp 强大到可以构造自己的一个世界,然后活在这个世界里。这个世界和现实世界本身就是一对矛盾,自然就存在两个世界如何对应的问题。

语言特点

  • LISP 为「函数式程序设计」语言,所有运算都能以函数作用于参数的方式来实现。
  • LISP 没有命令式语言程序中常见赋值语句和变量,重复的过程可以使用递归的函数调用来表示,并不需要使用循环模式。
  • LISP 是古老的函数语言、弱类型、动态推断,其代码本身就是各种列表。每一个表项均可以储存任何类型的数据如数字、函数、符号或一个子表等,在编码时,可以随时操作以更新列表。
  • LISP 核心的操作符只有7个操作符:quoteatomeqcarcdrconscond。前三者 quote、atom、eq 用于符号的推断;car、cdr、cons 操纵表格;cond 负责分支判断。这种简洁定义,非常接近「图灵机」原型的纯函数式语言,是现代语言完全无法比拟的。
  • LISP 作为弱类型这优点相对缺点则是运行效率的低下。原始定义简洁的缺点使到大型开发工程变得困难,自底层到高层,自二维表查询到面向对象,使用者需要嵌入更多的函数来实现,致使LISP众多方言的衍生。

语言组成

数据类型

LISP 只有两种数据结构,原子(atom)和(list)。原子为标识符形式的符号或数字的字面值,表则是由零个或多个表达式组成的序列。基本上,LISP 程序,并不需要使用一般表处理所必需的任意插入及删除操作。

语句结构

LISP 的语法是简洁的典型,程序代码与数据的形式完全相同,以圆括号为边界的表。

表:(A B C D)

按数据来解释时,它是一个有 4 个元素的表,按代码来解释时,它是将名为 A 的函数作用于 3 个参数 B、C、D。在 指定表结构 时将表的元素放在圆括号中,简单的表的元素仅限原子而成的方式是:
(A B C D)

嵌套表结构 亦是以圆括号来表示,表:(A (B C) D (E (F G))) 由 4 个元素组成。
第 1 个元素是原子 A,第 2 个是子表 (B C),第 3 个是原子 D,第4个是子表 (E (F G)),它的第2个元素是子表 (F G)

关键字

LISP是一个函数式程序语言,并无关键字或保留字设,置使用者可自行再定义。

语言执行

LISP语法,可透过执行 Hello World 程序来体现。此程序透过 XLISP-STAT 2.1,3.45 Beta 版编译器执行。

(DEFUN HELLO ()

  "HELLO WORLD"

)

语言应用

LISP是函数式程序设计的先锋,其诸多革命性的创新思维影响了后续编程语言的发展,亦完全垄断人工智能领域的应用长达三分之一个世纪。曾在开展初年出现的低效率因素亦在集体改良中被移去,成就了广被应用于软件开发、电子商务及金融系统的 Common Lisp、Scheme、Emacs、Lisp、Clojure 等。

Lisp is a language for doing what you've been told is impossible.
——Kent Pitman

本作品采用《CC 协议》,转载必须注明作者和本文链接
不要试图用百米冲刺的方法完成马拉松比赛。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!