Tag: clojure

使用和要求之间的区别

任何人都可以解释use和require之间的差异,直接使用和作为:use和:require在nsmacros吗?

Clojure:减less与适用

我理解reduce和apply的概念区别: (reduce + (list 1 2 3 4 5)) ; translates to: (+ (+ (+ (+ 1 2) 3) 4) 5) (apply + (list 1 2 3 4 5)) ; translates to: (+ 1 2 3 4 5) 然而,哪一个更习惯clojure? 这样或那样有很大的不同吗? 从我的(有限)性能testing来看, reduce速度似乎有点快。

懒洋洋地产生排列

我正在寻找一种algorithm来生成一个集合的排列,这样我就可以在Clojure中创build一个懒惰的列表。 即我想迭代一个排列列表,其中每个排列不被计算,直到我请求它,所有的排列不必一次存储在内存中。 另外,我正在寻找一个给定一个集合的algorithm,它将返回该集合的“下一个”排列,以这种方式重复调用自己的输出函数将循环所有排列的原始集合,在有些命令(顺序是什么并不重要)。 有这样一个algorithm吗? 我所看到的大部分排列生成algorithm倾向于一次生成它们(通常是recursion的),这不会扩展到很大的集合。 在Clojure(或其他function语言)中的实现将是有益的,但我可以从伪代码中找出它。

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

我试图理解Lisp-1和Lisp-2之间的区别,以及它如何与Clojure相关,但我仍然无法正确理解。 任何人都可以启发我吗?

为什么是eval邪恶?

我知道Lisp和Scheme程序员通常会说,除非严格需要,否则应该避免使用eval。 我已经看到几种编程语言的相同的build议,但我还没有看到一个明确的反对使用eval的参数列表。 我在哪里可以find使用eval的潜在问题的帐户? 例如,我知道过程编程中的GOTO问题(使程序不可读,难以维护,难以find安全问题等),但是我从来没有看到反对eval的论点。 有趣的是,反对GOTO的同样的论点应该是有效的反对延续,但是我看到Schemers,例如,不会说延续是“邪恶的” – 你应该小心使用它们。 他们更有可能使用eval而不是使用代码使用代码(据我所知 – 我可能是错的)。

从java调用clojure

大多数的“从Java调用clojure”的谷歌命中已过时,build议使用clojure.lang.RT来编译源代码。 如果你已经从Clojure项目中构build了一个jar并将其包含在classpath中,那么你能否帮忙清楚地说明如何从Java调用Clojure?