我在Clojure中尝试了以下内容,期望返回一个非惰性序列的类:
(.getClass (doall (take 3 (repeatedly rand))))
Run Code Online (Sandbox Code Playgroud)
但是,这仍然会回归clojure.lang.LazySeq.我的猜测是doall评估整个序列,但返回原始序列,因为它仍然可用于记忆.
那么从懒惰中创建一个非懒惰序列的惯用手段是什么?
我试图理解Lisp-1和Lisp-2之间的区别以及它与Clojure的关系,但我仍然不理解.任何人都可以开导我吗?
在进行提前编译时,是否可以在多个源文件上拆分Clojure命名空间:gen-class?怎么做(:main true)和(defn- ...)发挥?
我已经尝试过阅读这个但我仍然不明白它们的价值或它们取代的东西.他们是否让我的代码更短,更容易理解?
很多人发布了答案,但很高兴看到有和没有换能器的例子非常简单,甚至像我这样的白痴也能理解.除非传感器当然需要一定程度的理解,在这种情况下我永远不会理解它们:(
当我想要一个向量时,我经常发现自己使用了一个惰性列表,反之亦然.此外,有时我有一个地图矢量,当我真的想要一组地图时.是否有任何辅助函数可以帮助我在这些类型之间进行转换?
期货和承诺都会阻止,直到他们计算出它们的价值,那么它们之间有什么区别呢?
我的问题的目的不是要开始一场火焰战争,而是要确定在什么情况下每种语言都是"工作的最佳工具".
我已经阅读了几本关于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的缺点):
用户可定义的阅读器宏.
其他优点?
思考?其他差异?
我最近看到很多关于函数式编程的东西,而Clojure看起来特别有趣.虽然我"理解"它的基本描述,但是如果我可以的话,我无法弄清楚如何在日常工作中使用它作为Web开发人员.我所阅读的很多内容都集中在函数式编程的数学方面,而不是常规OO中的典型编程情况.
我有错误的结束吗?函数式编程与Web开发完全无关吗?如果没有,是否有任何关于它'用于网络'的例子?
使用短符号#(..)有一些我不了解匿名函数的东西
以下作品:
REPL> ((fn [s] s) "Eh")
"Eh"
Run Code Online (Sandbox Code Playgroud)
但这不是:
REPL> (#(%) "Eh")
Run Code Online (Sandbox Code Playgroud)
这有效:
REPL> (#(str %) "Eh")
"Eh"
Run Code Online (Sandbox Code Playgroud)
我不明白的是为什么(#(%)"Eh")不起作用,同时我不需要使用str in ((fn [s] s)"Eh")
它们都是匿名函数,它们都带有一个参数.为什么简写符号需要一个函数而另一个符号不需要?
clojure ×10
lisp ×2
common-lisp ×1
comparison ×1
compilation ×1
emacs ×1
function ×1
future ×1
lisp-2 ×1
namespaces ×1
promise ×1
scheme ×1
terminology ×1
transducer ×1