Clojure 编程语言:充分利用 Eclipse 的 Clojure 插件

Lisp 是一种编程语言,以表达性和功能强大著称,但人们通常认为它不太适合应用于一般情况。Clojure 是一种运行在 Java™ 平台上的 Lisp 方言,它的出现彻底改变了这一现状。如今,在任何具备 Java 虚拟机的地方,您都可以利用 Lisp 的强大功能。在本文中,了解如何开始使用 Clojure,学习它的一些语法,同时利用 Eclipse 的 Clojure 插件提供帮助。

本文介绍了 Clojure 编程语言。Clojure 是一种 Lisp 方言。本文假设您不熟悉 Lisp,但需要您具备 Java 技术方面的知识。要编写 Clojure 程序,需要 Java Development Kit V5 或更高版本以及 Clojure 库。本文使用的是 JDK V1.6.0_13 和 Clojure V1。此外,您还需要利用 Eclipse 的 Clojure 插件(clojure-dev),因此还要用到 Eclipse。在本文中,我们使用了 Eclipse V3.5 和 clojure-dev 0.0.34。

什么是 Clojure?

不久前,要想在 Java Virtual Machine (JVM) 上运行程序,还需要使用 Java 编程语言来编写程序。但那个时代已经一去不复返了。现在更多的选择,比如 Groovy、Ruby(通过 JRuby)及 Python (通过 Jython),带来了一种更为过程化的脚本式的编程风格,或者它们各自拥有独特的面向对象编程特色。这两种都是 Java 程序员所熟悉的。也许有人会说用这些语言与用 Java 语言编写程序没什么区别,只要习惯不同的语法就可以了。

虽然 Clojure 还不算是 JVM 的一种新的编程语言,但它与 Java 技术及前面提到过的其他任何 JVM 语言都有很大的区别。它是一种 Lisp 方言。从 20 世纪 50 年代开始至今,Lisp 语言家族已经存在很长时间了。Lisp 使用的是截然不同的 S-表达式或前缀 注释。这个注释可以被归结为 (function arguments...)。通常总是从函数名开始,然后列出要向这个函数添加的零个或多个参数。函数及其参数通过圆括号组织在一起。数量众多的括号也成为了 Lisp 的一大特征。

您可能已经发现,Clojure 是一种函数式编程语言。专业人士可能会说它太过单一,但实际上它却囊括了函数式编程的所有精华:避免了不稳定状态、递归、更高阶的函数等。Clojure 还是一个动态类型的语言,您可以选择添加类型信息来提高代码中的关键路径的性能。Clojure 不仅可在 JVM 上运行,而且在设计上还兼顾了 Java 的互操作性。最后,Clojure 在设计上也考虑了并发性,并具有并发编程的一些独特特性。

Clojure 示例

对大多数人来说,学习一种新的编程语言的最佳方法是从练习编写代码开始。按照这个思路,我们将提出一些简单的编程问题,然后用 Clojure 来解决这些问题。我们将深入剖析每种解决方案以便您能更好地理解 Clojure 是如何工作的、该如何使用它、它最擅长什么。不过,像其他语言一样,要想使用 Clojure,我们需要先为它建立一个开发环境。幸好,建立 Clojure 环境非常容易。

最低设置

要建立 Clojure 语言环境,您所需要的就是一个 JDK 和 Clojure 库(一个 JAR 文件)。开发和运行 Clojure 程序有两种常用方式。其中最常用的一种方法是使用它的 REPL(read-eval-print-loop)。

清单 1. Clojure REPL

$ java -cp clojure-1.0.0.jar clojure.lang.Repl Clojure 1.0.0- user=>

此命令从 Clojure JAR 所在的目录运行。按需要,将路径调整到 JAR。您还可以创建一个脚本并执行此脚本。为此,需要执行一个名为 clojure.main 的 Java 类。

清单 2. Clojure main

$ java -cp clojure-1.0.0.jar clojure.main /some/path/to/Euler1.clj 233168

同样,您需要将路径调整到 Clojure JAR 及脚本。Clojure 终于有了 IDE 支持。Eclipse 用户可以通过 Eclipse 升级网站来安装 clojure-dev 插件。安装完毕且确保处于 Java 透视图中后,就可以创建一个新的 Clojure 项目和新的 Clojure 文件了,如下所示。

图 1. 使用 Eclipse 的 Clojure 插件 clojure-dev

使用 Eclipse 的 Clojure 插件 clojure-dev

有了 clojure-dev,您就能够获得一些基本语法的亮点,包括圆括号匹配(Lisp 所必需的)。您还可以在被直接嵌入到 Eclipse 的一个 REPL 中放入任意脚本。这个插件还很新,在本文写作之时,它的特性还在不断发展。现在,我们已经解决了基础设置的问题,接下来让我们通过编写一些 Clojure 程序来进一步研究这个编程语言。

示例 1:处理序列

Lisp 这一名字来自于 “列表处理”,人们常说 Lisp 中的任何东西都是一个列表。在 Clojure 中,列表被统一成了序列。在第一个示例中,我们将处理下述的编程问题。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/343500d1f46862334c243a65e4062571.html