标签: clojure

好的Clojure代码示例?

我正在第一次检查Clojure.我发现查看Clojure核心库的(doc xxx)和(source xxx)非常有用,但我更关心的是如何组织和整理完整的应用程序.

有没有优秀的,开源的例子?

例如,要学习如何在Java中编写代码,我可能会看一下Spring源代码或类似内容.

clojure

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

学习功能/ Clojure编程 - 实践练习?

我正在学习Clojure的函数式编程.你能推荐什么实际练习?使用解决方案的在线存储库将是完美的.

我能想到的一个想法是通过排序,树,图等所有流行的算法,并在Clojure中实现它们.虽然它可以工作,但它可能非常陡峭,而且我很可能效率低下(与知道她在做什么的人相比).

functional-programming clojure

41
推荐指数
7
解决办法
1万
查看次数

在if-else中执行多个语句而不使用nullpointer异常

我正在尝试深入研究clojure和函数式编程.

在我的代码的某些时候,我有一个(def server (spawn-server)).现在我想要一个REPL的短函数来检查这个套接字的状态.

这就是我现在所拥有的:

(defn status []
  (if server 
    (
      (println "server is up and running")
      (println "connections:" (connection-count server)) 
     )    
    (println "server is down")))
Run Code Online (Sandbox Code Playgroud)

如果服务器是nil,一切正常,但如果服务器正在运行,这是REPL上的输出:

=> (status)
server is up and running
connections: 0
#<CompilerException java.lang.NullPointerException (NO_SOURCE_FILE:0)>
Run Code Online (Sandbox Code Playgroud)

我不确定我是否看到了问题,但我无法弄清楚这应该如何工作:-)我在这里有这样的:

((println "foo")(println "foo"))
Run Code Online (Sandbox Code Playgroud)

哪个会被评估到(nil nil)NullPointerException的结果?

通常我不会使用外括号,但如何为if条件创建某种"块"语句.如果我不使用它们,第二个println将被用作其他.

什么是有效的是使用let作为某种"块" - 陈述:

(let [] 
  (println "server is up and running"),
  (println "connections:" (connection-count server)) )
Run Code Online (Sandbox Code Playgroud)

但我不确定这是否是"正确"的解决方案?

clojure

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

Clojure与Numpy的矩阵乘法

我正在使用Clojure中的一个应用程序,它需要繁殖大型矩阵,并且与相同的Numpy版本相比,遇到了一些大的性能问题.Numpy似乎能够在一秒钟内通过其转置乘以1,000,000x23矩阵,而等效的clojure代码需要超过六分钟.(我可以从Numpy打印出结果矩阵,所以它肯定会评估所有内容).

我在这个Clojure代码中做了哪些非常错误的事情?我可以尝试模仿Numpy的一些技巧吗?

这是python:

import numpy as np

def test_my_mult(n):
    A = np.random.rand(n*23).reshape(n,23)
    At = A.T

    t0 = time.time()
    res = np.dot(A.T, A)
    print time.time() - t0
    print np.shape(res)

    return res

# Example (returns a 23x23 matrix):
# >>> results = test_my_mult(1000000)
# 
# 0.906938076019
# (23, 23)
Run Code Online (Sandbox Code Playgroud)

和clojure:

(defn feature-vec [n]
  (map (partial cons 1)
       (for [x (range n)]
         (take 22 (repeatedly rand)))))

(defn dot-product [x y]
  (reduce + (map * x y)))

(defn transpose
  "returns the transposition of a …
Run Code Online (Sandbox Code Playgroud)

python numpy clojure matrix

41
推荐指数
6
解决办法
1万
查看次数

Clojure ^:const是如何工作的?

我试图理解^:constclojure中的内容.这就是开发人员所说的.http://dev.clojure.org/display/doc/1.3

(def常数{:pi 3.14:e 2.71})

(def ^:const pi(:pi constants))(def ^:const e(:e constants))

查找的开销:e和:地图中的pi发生在编译时,因为(:pi常量)和(:e常量)在评估其父def形式时进行评估.

这是令人困惑的,因为元数据用于符号的var绑定pi,而var绑定到符号e,但下面的句子说它有助于加速地图查找,而不是var查找.

有人可以解释一下^:const正在做什么以及使用它背后的理由吗?请问这个比较使用一个巨大的let块或使用宏象(pi)和(e)?

constants clojure

41
推荐指数
3
解决办法
9684
查看次数

Haskell,Scala,Clojure,如何选择高性能模式匹配和并发

在阅读了很多关于FP的并发执行和性能优势的博客和帖子后,我最近开始研究FP.我对FP的需求在很大程度上受到我正在开发的应用程序的影响.我的应用程序是一个基于状态的数据注入到另一个子系统,其中时间非常关键(接近每秒200万个事务).我有几个这样的子系统需要测试.我正在认真考虑使用FP来实现其并行性,并希望采用正确的方法,SO上的许多帖子都谈到了Scala,Haskell和Clojure wrt语言结构,库和JVM支持的缺点和优点.从语言的角度来看,我可以学习任何语言,只要它能帮助我实现结果.

某些帖子支持Haskell进行模式匹配和语言简单,基于JVM的FP lang在使用现有Java库方面具有很大的优势.JaneStreet是OCAML的重要支持者,但我真的不确定OCAML的开发者支持和帮助论坛.

如果有人处理过这么大的数据,请分享您的经验.

ocaml haskell programming-languages scala clojure

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

从没有破折号的字符串创建UUID

如何从没有破折号的字符串创建java.util.UUID?

"5231b533ba17478798a3f2df37de2aD7" => #uuid "5231b533-ba17-4787-98a3-f2df37de2aD7"
Run Code Online (Sandbox Code Playgroud)

java string uuid clojure

41
推荐指数
7
解决办法
5万
查看次数

检查String是否包含clojure中的子字符串

我需要在我的测试中检查java String是否包含子字符串.

这不起作用,因为java字符串不是集合:

(deftest test_8
    (testing "get page from sputnik"
        (let [
            band "Isis"
            page (get-sputnikpage-for-artist band)
            ]
            (is (contains? band "Isis")))));does NOT work
Run Code Online (Sandbox Code Playgroud)

有没有办法将java字符串转换为集合?或者我可以通过其他方式检查子串出现?

string clojure

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

什么是Clojure易变?

在最近的Clojure 1.7版本中有一个补充:volatile!

volatile 已经在许多语言中使用,包括java,但Clojure中的语义是什么?

它有什么作用?什么时候有用?

clojure

41
推荐指数
2
解决办法
4365
查看次数

40
推荐指数
1
解决办法
5250
查看次数