我的问题的目的不是开始一场火焰战争,而是要确定在什么情况下每种语言都是“工作的最佳工具”。 我已经阅读了几本关于Clojure(Clojure 编程 , 实用Clojure , Clojure 的喜悦 ,以及Clojure在行动的Manning早期版本)的书籍,我认为这是一个很棒的语言。 我目前正在阅读主要处理Common Lispmacros的Let Over Lambda ,而且它也是一个非常有趣的语言。 我不是一个Lisp专家(更多的是一个新手),但是这个语言家族让我着迷,一般情况下函数式编程也是如此。 Clojure的优点 (和“其他”的缺点): 在JVM上运行。 JVM是一个非常稳定,高性能的语言环境,非常符合Sun的“一次编写,几乎任何地方运行”的梦想。 我可以在我的Macbook Pro上编写代码,将其编译为可执行的JAR文件,然后在Linux和Microsoft Windows上运行,只需进行一些额外的testing即可。 (Hotspot和其他)JVM支持高质量的垃圾收集和非常高效的即时编译和优化。 就在几年前,我写了所有必须在C中快速运行的东西,现在我毫不犹豫地用Java来做。 标准,简单,multithreading模型。 Common Lisp是否有一个标准的multithreading包? 虽然Common Lisp专家可能会告诉我,使用读取器macros,您可以将它们添加到CL中,以[] , {}和#{}分解所有括号中的单调。 Clojure的缺点 : 在JVM上运行。 没有尾recursion或延续。 Common Lisp支持连续性吗? 我相信计划需要两方面的支持。 其他人的优点(特别是Common Lisp) (和Clojure的缺点): 用户可定义的阅读器macros。 其他优点? 思考? 其他区别?
我正在学习Clojure,我正在试图定义一个函数,它需要一个可变数量的参数(一个可变参数函数)并将它们相加(就像+程序一样)。 但是,我不知道如何实现这样的function 我能做的一切是: (defn sum [n1, n2] (+ n1 n2)) 当然这个函数只需要两个参数和两个参数。 请教我如何让它接受(和处理)一个未定义数量的参数。
我现在正在学习函数指针,而当我准备好关于这个主题的K&R章节时,第一个打到我的是“嘿,这有点像闭包。 我知道这个假设在某种程度上是根本错误的,在线search之后并没有真正find对比的分析。 那么为什么C风格函数指针与闭包或lambdas根本不同? 据我所知,与函数指针仍然指向一个已定义的(已命名的)函数,而不是能够匿名定义该函数有关。 为什么要传递一个函数到第二种情况下更强大的函数中,而第二种情况下它是未命名的,而第一种情况只是一个正常的日常函数而已? 请告诉我如何以及为什么我错误地比较两者如此密切。 谢谢。
我理解LET和LET *之间的区别(并行与顺序绑定),作为一个理论问题,它是非常有意义的。 但是有没有什么情况下你真的需要LET? 在我最近研究过的所有的Lisp代码中,都可以用LET *replace每个LET,而不会改变。 编辑:好的,我明白为什么有些人发明了LET *,大概是一个macros,回头的时候。 我的问题是,鉴于LET *的存在,是否有理由让LET呆在附近? 你有没有写出任何实际的Lisp代码,LET *不能和普通的LET一样工作? 我不买效率的说法。 首先,认识到LET *可以被编译成像LET一样有效的情况似乎并不困难。 其次,在CL规范中有很多东西,根本不像是围绕效率devise的。 (当你最后一次看到types声明的LOOP时,那些是很难弄清楚的,我从来没有见过它们被使用过。)在迪克·加布里埃尔(Dick Gabriel)20世纪80年代后期的基准之前,CL 是非常缓慢的。 看起来这是另一个向后兼容的情况:明智的是,没有人愿意冒险打破像LET这样基本的东西。 我的预感是什么,但是听到没有人有一个愚蠢简单的例子,我很想知道哪里让我们比LET容易得多。
在Emacs Lisp中,如何检查variables是否被定义?
我一直在使用Lisp一段时间,但是我开始更加认真地对Lisp做一些“真正的”工作。 我是一个庞大的Vim粉丝,想知道如何使用Vim作为我的Lisp开发编辑来提高效率。 插件,工作stream程build议等都是受欢迎的。 请不要说“使用emacs”,因为我已经加强了Vim,我真的很享受它的编辑。
我知道他们是同一种叫lisp的语言家族的方言,但究竟有什么不同呢? 如果可能的话,你能否给出一个概述,包括语法,特性,特性和资源等主题。
谁能够熟练地解释这个笑话给我? 我已经做了一些关于函数式编程语言的阅读,并且知道CAR / CDR意味着地址/减量寄存器的内容,但是我还是不太懂幽默。
我正在寻找一个Scheme的版本,甚至是LISP,我可以用它来恢复丢失的Lisp开发技能。 一些networkingfunction会很好,但不是必需的。 我曾经看过Plt和MIT的计划,虽然两者看起来不错,但Plt似乎更富有特色。 我也看了Lisp的实现,但所有这些看起来都相当昂贵。 我赞成免费/廉价的实现,因为这真的可能只是偶尔的嗜好编程。 你会有什么build议?
静态types的完整Lisp变体是可能的吗? 这样的事情是否有意义存在? 我相信Lisp语言的优点之一就是其定义的简单性。 静态键入会破坏这个核心原则吗?