标签: clojure

如何在Clojure中将惰性序列转换为非惰性序列

我在Clojure中尝试了以下内容,期望返回一个非惰性序列的类:

(.getClass (doall (take 3 (repeatedly rand))))
Run Code Online (Sandbox Code Playgroud)

但是,这仍然会回归clojure.lang.LazySeq.我的猜测是doall评估整个序列,但返回原始序列,因为它仍然可用于记忆.

那么从懒惰中创建一个非懒惰序列的惯用手段是什么?

clojure lazy-evaluation

91
推荐指数
5
解决办法
4万
查看次数

Lisp-1和Lisp-2有什么区别?

我试图理解Lisp-1和Lisp-2之间的区别以及它与Clojure的关系,但我仍然不理解.任何人都可以开导我吗?

lisp clojure lisp-2

89
推荐指数
2
解决办法
2万
查看次数

在多个文件上拆分Clojure命名空间

在进行提前编译时,是否可以在多个源文件上拆分Clojure命名空间:gen-class?怎么做(:main true)(defn- ...)发挥?

namespaces compilation clojure

89
推荐指数
1
解决办法
9765
查看次数

有人可以用简单的术语向我解释Clojure Transducers吗?

我已经尝试过阅读这个但我仍然不明白它们的价值或它们取代的东西.他们是否让我的代码更短,更容易理解?

更新

很多人发布了答案,但很高兴看到有和没有换能器的例子非常简单,甚至像我这样的白痴也能理解.除非传感器当然需要一定程度的理解,在这种情况下我永远不会理解它们:(

clojure transducer

89
推荐指数
8
解决办法
1万
查看次数

在Clojure中有一种简单的方法来转换列表类型?

当我想要一个向量时,我经常发现自己使用了一个惰性列表,反之亦然.此外,有时我有一个地图矢量,当我真的想要一组地图时.是否有任何辅助函数可以帮助我在这些类型之间进行转换?

clojure

88
推荐指数
6
解决办法
4万
查看次数

为Elocs/Swank/Paredit提供Clojure的温和教程

我正在转向Emacs来处理Clojure/Lisp.为了能够执行以下操作,我需要在Emacs上设置的所有信息是什么?

  1. 自动匹配/生成相应的关闭括号
  2. autoindent Lisp/Clojure风格,而不是C++/Java风格
  3. 语法突出显示
  4. 调用REPL
  5. 能够将文件中的一部分代码加载到REPL中并进行评估.

如果我在Emacs上进行设置之后还可以获得命令列表来获取这些内容,那将是很棒的.

emacs clojure

87
推荐指数
3
解决办法
2万
查看次数

Clojure期货与承诺有何不同?

期货和承诺都会阻止,直到他们计算出它们的价值,那么它们之间有什么区别呢?

terminology future clojure promise

87
推荐指数
2
解决办法
1万
查看次数

Clojure与其他Lisps

我的问题的目的不是要开始一场火焰战争,而是要确定在什么情况下每种语言都是"工作的最佳工具".

我已经阅读了几本关于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的缺点:

  • 在JVM上运行.
    • 没有尾递归或延续.Common Lisp是否支持延续?我相信,计划需要支持两者.

其他人的优点(特别是Common Lisp)(以及Clojure的缺点):

  • 用户可定义的阅读器宏.

  • 其他优点?

思考?其他差异?

lisp comparison scheme clojure common-lisp

87
推荐指数
4
解决办法
4万
查看次数

函数式编程是否与Web开发相关?

我最近看到很多关于函数式编程的东西,而Clojure看起来特别有趣.虽然我"理解"它的基本描述,但是如果我可以的话,我无法弄清楚如何在日常工作中使用它作为Web开发人员.我所阅读的很多内容都集中在函数式编程的数学方面,而不是常规OO中的典型编程情况.

我有错误的结束吗?函数式编程与Web开发完全无关吗?如果没有,是否有任何关于它'用于网络'的例子?

functional-programming clojure

85
推荐指数
5
解决办法
2万
查看次数

匿名功能简写

使用短符号#(..)有一些我不了解匿名函数的东西

以下作品:

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")

它们都是匿名函数,它们都带有一个参数.为什么简写符号需要一个函数而另一个符号不需要?

function clojure anonymous-function

84
推荐指数
3
解决办法
3万
查看次数