我正在第一次检查Clojure.我发现查看Clojure核心库的(doc xxx)和(source xxx)非常有用,但我更关心的是如何组织和整理完整的应用程序.
有没有优秀的,开源的例子?
例如,要学习如何在Java中编写代码,我可能会看一下Spring源代码或类似内容.
我正在学习Clojure的函数式编程.你能推荐什么实际练习?使用解决方案的在线存储库将是完美的.
我能想到的一个想法是通过排序,树,图等所有流行的算法,并在Clojure中实现它们.虽然它可以工作,但它可能非常陡峭,而且我很可能效率低下(与知道她在做什么的人相比).
我正在尝试深入研究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中的一个应用程序,它需要繁殖大型矩阵,并且与相同的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) 我试图理解^: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)?
在阅读了很多关于FP的并发执行和性能优势的博客和帖子后,我最近开始研究FP.我对FP的需求在很大程度上受到我正在开发的应用程序的影响.我的应用程序是一个基于状态的数据注入到另一个子系统,其中时间非常关键(接近每秒200万个事务).我有几个这样的子系统需要测试.我正在认真考虑使用FP来实现其并行性,并希望采用正确的方法,SO上的许多帖子都谈到了Scala,Haskell和Clojure wrt语言结构,库和JVM支持的缺点和优点.从语言的角度来看,我可以学习任何语言,只要它能帮助我实现结果.
某些帖子支持Haskell进行模式匹配和语言简单,基于JVM的FP lang在使用现有Java库方面具有很大的优势.JaneStreet是OCAML的重要支持者,但我真的不确定OCAML的开发者支持和帮助论坛.
如果有人处理过这么大的数据,请分享您的经验.
如何从没有破折号的字符串创建java.util.UUID?
"5231b533ba17478798a3f2df37de2aD7" => #uuid "5231b533-ba17-4787-98a3-f2df37de2aD7"
Run Code Online (Sandbox Code Playgroud) 我需要在我的测试中检查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字符串转换为集合?或者我可以通过其他方式检查子串出现?