我的问题的目的不是开始一场火焰战争,而是要确定在什么情况下每种语言都是“工作的最佳工具”。 我已经阅读了几本关于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。 其他优点? 思考? 其他区别?
使用什么优点:refer :require已经结束使用:only在:use ? 以下是同义词吗? (ns so.example (:use [my.lib :only [function]])) 和 (ns so.example (:require [my.lib :refer [function]]))
Clojure使用哪些真实世界的应用程序? 我使用Groovy进行粘合,大型系统使用Java,parsing和粘贴使用Python / Perl脚本。 我可以看到自己从Java调用Clojure,但是我看不到自己在哪里使用它。 这让我觉得,几乎所有的脚本语言都可以用于特殊任务。 我不是Groovy的专家,也不是任何一个fanboy,但是它让我觉得它有一个更好的支持框架,工具和大量的语言结构(闭包,函数式编程)。 斯卡拉也是如此。 难道它的未来就像embedded其他系统的语言一样吗?
我正在学习Clojure,我正在试图定义一个函数,它需要一个可变数量的参数(一个可变参数函数)并将它们相加(就像+程序一样)。 但是,我不知道如何实现这样的function 我能做的一切是: (defn sum [n1, n2] (+ n1 n2)) 当然这个函数只需要两个参数和两个参数。 请教我如何让它接受(和处理)一个未定义数量的参数。
Clojure具有gen-class,reify,proxy,deftype和defrecord来定义新类types的数据types。 对于语法简单并且不必要的复杂的语言来说,这似乎是一种失常。 有人能解释为什么是这样吗? Common Lisp风格的defclass能够吗?
有一些我不明白匿名函数使用短符号#(..) 以下工作: REPL> ((fn [s] s) "Eh") "Eh" 但是这不是: REPL> (#(%) "Eh") 这工作: REPL> (#(str %) "Eh") "Eh" 我不明白的是为什么(#(%)“Eh”)不起作用,同时我也不需要用str ((fn [s] s))“Eh”) 它们都是匿名函数,在这里它们都是一个参数。 为什么速记符号需要一个函数,而另一个符号不需要?
我已经尝试阅读这个,但我仍然不明白他们的价值或他们取代。 他们是否使我的代码更短,更容易理解或什么? 更新 很多人都发布了答案,但是看到带有和不带有换能器的例子很简单,甚至像我这样的白痴都能理解。 当然,除非传感器需要一定程度的理解,在这种情况下,我永远不会理解它们:(
可以在Clojure中编写Android应用程序吗? 任何人都可以提出一个好的教程或书,如果可能的话?
期货和承诺都会阻止,直到他们计算出它们的价值,那么它们之间的区别是什么?
我刚开始使用C / C ++(来自Ruby),我想用命令行界面构build一个小应用程序。 如何处理input/输出到CL? 我注意到有一个clojure.contrib.command线,但文件很苗条。 http://github.com/richhickey/clojure-contrib/blob/ffa868411cda6c617105b52b4f6f9e0f37ee8c24/src/clojure/contrib/command_line.clj