将 Common Lisp 应用程序移植到 Clojure 有多实用?更具体地说,Common Lisp 中存在哪些 Clojure 中不存在的功能,需要重写?
有一个clojure.org 上的列表 http://clojure.org/lispsClojure 和其他 Lisp 之间的差异。我在使用 Clojure 时注意到的其他一些事情:
惯用的 Clojure 严重依赖于不可变的数据结构。任何你看到的地方SETF
CL 中的内容可能需要在 Clojure 中进行更改才能充分利用。 (您始终可以选择在 Clojure 中使用可变 Java 数据结构,但大多数人不会。)
Clojure 的多方法与 CL 类似(可以说更强大,因为您可以分派类型以外的事物),但 Clojure 中不提供成熟的 CLOS。 Clojure 用途struct
相反,这只是一个奇特的哈希图。当然,Java 的 OOP 系统也是可用的。有些人正在致力于将 CLOS 移植到 Clojure,但我不确定这些努力目前进展到什么程度。
在符号/命名空间解析方面,Clojure 宏的工作方式与 CL 宏略有不同。我不确定我是否理解得足以阐明这些差异。不过,在 Clojure 中您不必过多地处理 gensym,这很好。
Clojure 没有像 CL 那样的条件系统。你只有Java的try
/catch
/finally
用于异常处理。
Clojure 不允许用户定义读取器宏。
Clojure 没有多个返回值。 Clojure 中的解构非常好(支持列表、向量、哈希映射、集合等),并且默认情况下它比 CL 内置到更多位置,因此这并不是什么问题。
根据应用程序及其编写方式,从 CL 移植到 Clojure 可能是实用且直接的,或者以更实用、线程安全的方式从头开始重写它以更好地适应 Clojure 风格可能更实用。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)