当前位置:  开发笔记 > 程序员 > 正文

将Common Lisp代码移植到Clojure

如何解决《将CommonLisp代码移植到Clojure》经验,为你挑选了3个好方法。

将Common Lisp应用程序移植到Clojure有多实用?更具体地说,Common Lisp中存在哪些功能在Clojure中不存在,并且必须重新编写?



1> Brian Carper..:

有一个关于clojure.org列表中的Clojure和其他的Lisp之间的差异.我注意到使用Clojure的其他一些事情:

惯用语Clojure倾向于不可变数据结构.您SETF在CL中看到的任何地方都可能需要在Clojure中进行更改以充分利用它.(您始终可以选择在Clojure中使用可变Java数据结构,但大多数人不这样做.)

Clojure的多种方法类似于CL(可以说更强大,因为你可以发送除类型之外的其他东西),但Clojure中没有完整的CLOS.struct相反,Clojure使用的只是一个花哨的hashmap.当然,Java的OOP系统也可用.有些人正在努力将CLOS移植到Clojure,但我不确定这些努力到目前为止还有多远.

在符号/命名空间解析方面,Clojure宏的工作方式与CL宏略有不同.我不确定我是否理解得足够清楚这些差异.你不必在Clojure中混淆gensyms,这很好.

Clojure没有像CL这样的条件系统.你只有Java的try/ catch/ finally异常处理.

Clojure不允许用户定义的阅读器宏.

Clojure没有多个返回值.Clojure中的解构非常好(支持列表,向量,哈希映射,集合等),并且默认情况下它构建在比CL更多的位置,因此这不是一个问题.

根据应用程序及其编写方式,从CL移植到Clojure可能是实用且简单的,或者从更加实用,线程安全的方式重写它以更好地适应Clojure风格可能更实用.


Clojure也是一个Lisp 1(带有命名空间),而CL是一个Lisp 2.这是一个非常重要的区别,它会对宏产生巨大影响,并且在较小程度上影响变量和函数声明.
它可以发送任何东西.您提供自己的任意调度功能.

2> zweiterlinde..:

我没有具体的答案,但我推荐这些资源:

Rich Hickey的两 部分是关于Lisp程序员的Clojure

斯图尔特哈洛韦的工作就从翻译彼得·塞贝尔的例子实用的Common Lisp到Clojure的.



3> Brian Gianfo..:

有许多关于从CL转换到Clojure的报道(博客,另一篇博客,HN上的线程).

许多Common Lispers在Clojure首次检查时遇到的最大问题是缺少Tail Call Optimization,这在JVM上是不可能的.


这就是你使用recur的原因.
许多CL也没有(它不是必需的),我不知道依赖它的任何程序(mers).例如,除非您使用动态空间优化,否则SBCL/CMUCL不会.
推荐阅读
赛亚兔备_393
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有