当前位置:  开发笔记 > 编程语言 > 正文

我应该学习哪个Lisp?

如何解决《我应该学习哪个Lisp?》经验,为你挑选了9个好方法。

Clojure是一种积极发展的现代Lisp方言.它基于JVM,因此所有Java库都可立即使用,因此也支持Unicode.

这是一种替代方案,而不是One True Answer.



1> Greg Hewgill..:

Clojure是一种积极发展的现代Lisp方言.它基于JVM,因此所有Java库都可立即使用,因此也支持Unicode.

这是一种替代方案,而不是One True Answer.


但它被JVM无可救药地阻碍了.你如何称呼LISP是一种非尾递归语言?
Javier,Clojure有一个`recur`(只能出现在尾部位置)给你一个尾调用,你可以自然地表达递归函数.我看到有人抱怨的JVM障碍:[没有未签名的类型](http://gnuvince.wordpress.com/2009/02/15/clojure-and-starcraft/).
JVM是Clojure权力的核心,它不会受到任何阻碍.
关于clojure的另一个评论.Clojure是一个"实际"和自以为是的Lisp.实用,因为使用JVM可以触及当今最大的回声系统.图书馆支持令人震惊.论文非常成熟,广泛且具有生产质量.很少有回声系统可以比较.意见是因为clojure拥抱不变性并不惜一切代价避免OOP.这是有趣和好的.但是你可以发现它很烦人.这可能不是你的一杯茶.从学习的角度来看,Clojure可能不是最好的lisp.但它肯定是制作专业的最好的之一.
Common Lisp也不是尾递归.我同意尾递归是好的; 我正在研究一种类似于Clojure的Lisp方言,但是用Python托管:http://ghewgill.livejournal.com/tag/psil获取更多信息.

2> dnolen..:

如果你想避免火焰战争,你喜欢图书馆与Clojure.它很小,很快,社区很有帮助,也没有教条.这是Lisp减去20世纪80年代荒谬的事情.它有一个BDFL,如果你有一个好主意,它很有可能会被实现到语言中.

我玩弄了Common Lisp,这是一件很美好的事情.我在DrScheme完成了SICP的前三章和Metacircular Evaluator,这也很美妙.当然,通过学习这些,你将从中受益匪浅.

但是,随着时间的推移,我已经开始认真地掌握小语言了.我不会撒谎,我喜欢Javascript而且我喜欢C(并且如果每种语言都没有C核心那就是该死的),因为它们很小.

Clojure很小.很优雅.它是我们这个时代的语言.



3> Gregg Lind..:

只需选一个,然后学习它.当你弄清楚差异时,如果你第一次选择不好,你就可以再次选择.



4> Bryan Kyle..:

Clojure是LISP的一种很好的方言,可以促进函数式编程.它在JVM上运行,因此您可以访问可能习惯使用的任何Java库.该网站提供了很好的文档和截屏视频,可以帮助您学习.另一个优点是,与许多其他方言不同,它的安装非常简单.

如果您只是想要了解Emacs(EmacsLISP)的概念是另一种选择.它附带了令人难以置信的文档,教程和大量代码示例.截屏也很容易找到.Emacs的一大好处是编辑器是用LISP编写的,因此编辑器自然可以很好地支持LISP的运行,编辑和调试.此外,您可以扩展编辑器,以便学习LISP 使您的日常文本编辑需求变得更加容易.



5> ayrnieu..:

Contra Chuck,Common Lisp的一个优点是它有一个标准,实现坚持并努力,这样你就可以在很大程度上利用SBCL(具有出色的类型检查和推理)进行开发,然后说,部署为可执行链接的可执行文件C库(使用ECL或其他)或作为.jar使用Java库(使用ABCL),或使用Mac或Windows本机GUI(Clozure,两者).Common Lisp在架构和实现之间以及随着时间的推移具有惊人的可移植性,并且Common Lispers在语言的支持下努力保持这种方式.举例说明,非标准化行为的一个愚蠢背离是"这是一个特殊变量吗?"的问题.所以我在我使用的实现中回答了它:

#-abcl
(defun special-variable-p (symbol)
  #+ecl(si:specialp symbol)
  #+ccl(proclaimed-special-p symbol)
  #+sbcl(equal '(:special t)
               (multiple-value-list-int:info :variable :kind symbol)))

在读取时,ABCL(它已经有了),(defun special-variable-p (symbol) (si:specialp symbol))ECL等等都没有减少.所以我可以将它放在我的.rc文件中并使用REPL中的common函数.但这不是很重要:这不是线程或各种支持的网络或通信顺序进程库.最后一个例子只有一个#+sbcl/#-sbcl,因为它运行在五个实现上.因为它依赖于经过精心移植的代码.

但是允许这种(和其他)优势的东西也给学习者带来了挑战:Common Lisp是一种非常大的语言.这不是你可以在一两个星期内啜饮的东西,就像我做过Clojure一样(但是我的Clojure已经随着突破性的变化而衰退了 - 这种语言尽管很重,但它有自己的优点,提醒我的对比是我喜欢Common Lisp的很多东西.)所以你应该阅读很多这个页面,并且让HyperSpec成为一个按键(对我来说,M-x hyperspec RET do-symbols RET已经足够接近圣经了.),并考虑购买几本书.我有Practical Common Lisp,刚刚获得Let Over Lambda,现在很快就会买到PAIP.

但是,即使Common Lisp是真正的答案,你也不会完全浪费你的时间来"挑选"一些看似浮华的替代方案( - '欺骗',因为普通的CL并没有向你展示它的宏可以做的所有事情,而且它比任何人都有更多种类的宏.通常的比较是在坏的CL和语法优化的替代X之间.你仍然可以学习基础知识,你仍然可以使用SICP,On Lisp,The Little Schemer等中的大部分内容.一个lisp,即使是错误的lisp,仍然比非lisp更好.(但是你会花一些时间来实现正确的口齿不清的部分,糟糕的是,在错误的口齿不清的情况下.Meta-Greenspun.)



6> Chuck..:

Lisp最大的问题是每个人都不会坚持不懈的标准.你不必只需要在Common Lisp和Scheme之间选择; 你必须在Common Lisp的几个不兼容的实现和几个不兼容的Scheme实现之间进行选择,以及其他一些像Arc和Clojure这样的小东西.

我建议从MzScheme开始.它很受欢迎,它是积极开发的,它有许多库提供现代编程环境的功能,而Scheme比Common Lisp更简单(更好,更简单).



7> mletterle..:

了解elisp,以便扩展Emacs.



8> Rayne..:

和Clojure一起去吧.它是一种令人惊叹的语言,可以完全访问任何Java库.它已经开发了超过2年,已经有3个IDE插件正在开发中,并且在4月份出版了一本关于它的书.它非常快,非常优雅和美丽.你不能错过Clojure.



9> Javier..:

对我来说,Scheme的基础理论更有说服力.到目前为止,PLTScheme是我发现的最活跃的LISP.不幸的是,它的打字数量激增,掩盖了Lisp的美丽.

我很想看到像arc这样的东西成功,但似乎不太可能.

推荐阅读
贾志军
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有