自1958年以来,一种古老的语言一直存在,并被用来解决编程和计算机科学中的现代问题。
在1950年代中后期,麻省理工学院的约翰·麦卡锡有一个要解决的问题。作为人工智能项目的一部分,他需要一种可以处理数据列表的编程语言。以正式方式构成的句子代表着世界的信息。计算机将导航和处理句子的列表来模仿人类推理。例如,通过比较由列表组织成的可能语句来回答问题。
用简单的话来说,如果你是计算机,并且程序会询问你在寒冷和饥饿时该怎么办,请列出可能的结果列表,然后浏览该列表以找到合理的结果。例如,如果你感冒,你将倾向于与温暖有关的句子,而避免与感冒有关的句子。这个问题抛给了麦卡锡,因为没有适合列表的软件语言,麦卡锡必须创造自己的语言。
但是接下来发生了一件有趣的事情。麦卡锡创建了他的语言,他称之为Lisp——List Processing的简写。正如保罗·格雷厄姆所说,麦卡锡为编程所做的与欧几里得为几何所做的一样。他从简单的运算符和函数符号系统构建了一种编程语言。但是他认为最重要的语言部分,即用于处理数学语法的m表达式,对使用Lisp的人来说最不重要。麦卡锡语言的次要部分之一,用来描述数据的s表达式,在随后的五十年中不断影响着许多编程语言。
更加有趣的是,斯蒂芬·罗素将Lisp中的理论评估函数转换为真实的机器代码。 Lisp现在可以解释用于描述数据的Lisp s表达式语句并运行Lisp程序。 1962年,第一个将Lisp编译为代码的软件将评估代码(在代码运行时处理)和编译代码(在代码运行之前处理)混合在一起。在20世纪70年代,麻省理工学院的丹尼尔·爱德华兹向Lisp添加了垃圾回收功能,该功能可以释放未使用的内存以提高语言的效率。
最初,它是一种解决问题的优雅极简方案,即作为人工智能项目的一部分来处理列表,它拥有完整的编程语言的种子,其创新思想可以影响数十种语言。例如,麦卡锡创建了现在常见的if-then-else条件语句,因此Lisp可以以紧密的结构化方式处理列表。 格雷厄姆还认为Lisp是思考软件编程问题的第二种方法。 FORTRAN和C是另一种更为熟悉的软件编程方式。
尽管关于哪种编程语言最好的争论经常引起激烈的讨论,但对于Lisp作为最佳语言的争论尤其强烈,这可能是由于其使用寿命长。许多有才华和创造力的人都在Lisp上进行工作,以完善和优化该语言。没错,Lisp一直是解决编程和计算机科学问题的不寻常且别出心裁的解决方案。一方面,Lisp一直倾向于使用简单的灵活解决方案,而其他语言却增加了复杂性(出于充分的理由)。麦卡锡的直觉是,随着时间的推移,一种更简单的语言将提供更多的灵活性。
但是,对于软件语言而言,没有对与错,最好或最坏的情况。在给定情况下,只有哪种语言最有效。 Lisp是第一种为FORTRAN及其后续语言提供替代语言的语言,同时又不偏离熟悉的语言。Lisp的不寻常部分之一是宏。如果你不知道,宏就是操控其他程序的代码。考虑一个重复的计算任务,可能是添加数字,然后将代码放入一个块中,然后调用该块,而不是重新键入用于添加数字的代码。如果你使用过Word宏,你就会明白,宏扩展了编程语言的功能。
借助Lisp,宏还允许程序员将特定于域的语言嵌入Lisp中。宏可以直接访问该语言所包含的解析器。使用Lisp,代码是数据(列表),数据可以是代码。它是一种可编程的软件语言。函数可以像变量一样传递并在代码中的其他地方进行处理,也可以像函数一样直接进行处理。Lisp的另一个功能是使用括号将数据组织到列表中。 Lisp中使用的语法或元素是原子和列表。原子是数字,字母和非字母数字字符,列表是原子或其他列表的序列。空格分隔原子和列表,如下所示:
(1 2 3 4)
在此示例中,原子1、2、3和4是列表中标有括号的原子。
(1(2 3 4(5 6)))
在此示例中,第一个列表是原子1,一个由2、3、4组成的列表,以及它自己的由5和6组成的列表。
由于使用了宏且语法解析简单,因此Lisp被大量用于特定领域,例如人工智能项目。Lisp的工作方式也适用于多种方言。例如,更新的编程语言Clojure以Lisp的方式工作,解决了现代问题,例如同时处理多个请求,最大程度地减少了需要相同资源或需要按特定顺序发生的进程间的冲突。这些问题不同于麦卡锡的问题,即创建一种语言来管理人工智能语句和简单的数学符号系统的语句。
Lisp语言已演变为Common Lisp和Scheme,以及各种方言。它们都以与原始语言规范类似的方式工作。在某些情况下,它们的命名和使用的元素不同。但是它们都使用相同的Lisp概念,包括宏。毫不夸张地说,了解Lisp类似于在《星球大战》中成为绝地武士并获得轻型军刀一样,是比较难的过程。当你学习了至少一种语言后改用Lisp时,Lisp的力量最为明显。例如,在其他语言设置语言操作方式的基本规则的地方,Lisp则经常让编码人员设置规则。在其他语言可能提供许多功能来完成大量任务的地方,Lisp通常可以用较少的功能来完成相同的任务。Lisp活了超过半个世纪,因为程序员不得不承认,十年又十年,Lisp依然是工作的最好工具。
联系客服