我目前主要是D程序员,我希望在我的工具箱中添加另一种语言,最好是支持元编程黑客的语言,而这些语言无法用静态编译的语言完成.
我已经阅读了一点Lisp,我很想找到一种语言,允许Lisp做的一些很酷的东西,但没有Lisp的奇怪语法等.我不想开始语言火焰战,我确信Ruby和Python都有他们的权衡,所以我将列出对我个人来说重要的事情.请告诉我Ruby,Python或其他语言是否最适合我.
重要:
有一些重要:
不重要:
任何精通lisp的人都可以向我解释这个笑话吗?我已经对函数式编程语言进行了一些阅读,并且知道CAR/CDR意味着地址/减量寄存器的内容,但我仍然不太了解幽默.
我的问题的目的不是要开始一场火焰战争,而是要确定在什么情况下每种语言都是"工作的最佳工具".
我已经阅读了几本关于Clojure的书(Clojure 编程,实用Clojure,Clojure 的喜悦,以及Clojure in Action的Manning Early Access版本),我认为这是一本很棒的语言.我目前正在阅读Let Over Lambda,它主要涉及Common Lisp宏,而且它也是一种非常有趣的语言.
我不是 Lisp专家(更多的是新手),但这个语言系列对我来说很有吸引力,一般来说,功能编程也是如此.
Clojure的优点(以及"其他"的缺点):
在JVM上运行.
JVM是一个非常稳定,高性能的语言环境,很好地满足了Sun的"一次编写,几乎在任何地方运行"的梦想.我可以在我的Macbook Pro上编写代码,将其编译成可执行的JAR文件,然后在Linux和Microsoft Windows上运行它,几乎不需要额外的测试.
(Hotspot和其他)JVM支持高质量的垃圾收集和非常高效的即时编译和优化.就在几年前,我写了一些必须在C中快速运行的东西,现在我毫不犹豫地在Java中这样做.
标准,简单,多线程模型.Common Lisp是否有标准的多线程包?
打破了所有这些括号的单调[],{}和#{},虽然Common Lisp的专家可能会告诉我,有读者宏,你可以添加那些CL.
Clojure的缺点:
其他人的优点(特别是Common Lisp)(以及Clojure的缺点):
用户可定义的阅读器宏.
其他优点?
思考?其他差异?
我一直在使用Lisp一段时间,但我开始更加认真地在Lisp中做一些"真正的"工作.我是一个巨大的Vim粉丝,并且想知道如何使用Vim作为我的Lisp开发编辑器来提高效率.插件,工作流程建议等都是受欢迎的.
请不要说"使用emacs",因为我已经加入了Vim,我真的很喜欢它作为一名编辑.
我正在寻找一个Scheme或甚至LISP的版本,我可以用它来恢复一些失去的Lisp开发技巧.一些Web功能会很好,但不是必需的.
我看过Plt和MIT方案,虽然两者看起来都不错,但Plt看起来更加丰富.我也看了Lisp实现,但所有看起来都很昂贵.
我赞成免费/廉价的实现,因为这可能只是偶尔的业余爱好编程.你有什么建议?
我刚才正在学习函数指针,当我正在阅读关于这个主题的K&R章节时,第一件让我感到惊讶的是,"嘿,这有点像一个闭包." 我知道这种假设在某种程度上是根本错误的,在网上搜索后我没有找到任何对这种比较的分析.
那么为什么C风格的函数指针与闭包或lambdas根本不同呢?据我所知,它与函数指针仍然指向已定义(命名)函数的事实有关,这与匿名定义函数的做法相反.
为什么将函数传递给在第二种情况下看起来更强大的函数,它是未命名的,而不是第一种传递的正常日常函数?
请告诉我如何以及为什么我错误地比较这两者.
谢谢.
我知道有一些不同的Lisp方言.在决定学习Lisp将是一种新的智力体验之后,我想知道要学习哪种Lisp方言,以及为什么.
有没有比其他人更受欢迎的?他们中的任何一个是否更"完整",如更好地记录和支持?这种方言的优点和缺点是什么?
我理解LET和LET*之间的区别(并行与顺序绑定),作为理论问题,它非常有意义.但有没有你真的需要LET的情况?在我最近看过的所有Lisp代码中,您可以用LET*替换每个LET而不做任何更改.
编辑:好的,我理解为什么有些人发明了LET*,大概是作为一个宏,回归的时候.我的问题是,鉴于LET*存在,是否有理由让LET留在身边?您是否编写了任何实际的Lisp代码,其中LET*不能像普通的LET那样工作?
我不买效率论证.首先,认识到LET*可以编译成像LET一样高效的情况,这似乎并不难.其次,CL规范中有很多东西似乎根本就不是围绕效率而设计的.(当你最后一次看到带有类型声明的循环时?那些很难弄清楚我从未见过它们使用过.)在20世纪80年代后期的Dick Gabriel基准测试之前,CL 非常缓慢.
看起来这是另一种向后兼容的情况:明智的是,没有人愿意冒险破坏像LET那样基本的东西.这是我的预感,但是听到没有人有一个我丢失的愚蠢简单的案例令人欣慰,因为LET比LET*更容易让事情变得简单.
我是一名C++程序员,正在尝试学习Common Lisp.我看了一些像Land of Lisp这样的书,并阅读了很多关于Lisp各种优点的在线文章.但是,我需要一些建议.
几乎所有我读过的关于Common Lisp的内容都与它的惊人之处有多大关系,以及它如何以惊人的速度完成这项工作以及它如何以30年前的现代编程语言解决许多问题.还有多么令人惊奇的宏,以及每个编程范例(OO,功能,基于actor或其他等)如何在Lisp中使用,以及列表如何是最终的数据结构.基本上将Lisp视为一种研究语言,并说它是多么的不同和革命性.
所有这些东西都可能是真的,但问题是我没有看到很多东西如何做实际的事情,如读取文件并将其拆分成文字并对其进行一些处理.为了学习Common Lisp,我对学习Common Lisp不感兴趣,但为了让我以前在C++中做的事情做得更快,错误更少.
所以我的问题是什么是最好的资源(无论是网站,书籍,什么),专注于教授如何使用Common Lisp来完成常见的编程任务,如
而且也不太实际,立即注意到,如何实现LISP常用的数据结构,如堆,栈,二叉搜索树等,但可以使用像Lisp的列表操作是公正car和cdr正确的方式.我不知道.
我非常怀疑Lisp中的任何一个(列表中最后两个不太可能例外)是不可能的,或者人们不会那么喜欢它.我读到的上述内容提到了很多用Lisp编写的真实世界软件(想想雅虎网上商店).
但是,之前使用(?)命令式语言编程,我急于使用我所获得的新知识来编写实际应用程序.那么用Lisp学习编写实用软件的最快方法是什么?
顺便说一句,我看到彼得·塞贝尔的实践Common Lisp的,但是,以TOC来看,它只是触及了一些我想学习使用Lisp的做的事情.
还有一个问题,如果我可以(对不起,如果将两个问题合并为一个),我在哪里可以找到对Lisp函数和东西的引用?
我真的很想要Lisp.