小编mik*_*era的帖子

RRB树维持什么不变量?

宽松基数平衡树(RRB-trees)是不可变向量(在Clojure和Scala中使用)的推广,它具有"有效恒定"的索引和更新时间.RRB树保持有效的索引和更新,但也允许有效的连接(log n).

作者以我难以理解的方式呈现数据结构.我不太清楚每个节点维护的不变量.

在2.5节中,他们描述了他们的算法.我认为他们确保索引到节点只需要在基数搜索后进行线性搜索的额外步骤.我不明白他们是如何得出他们的额外步骤的公式,我想也许我不确定每个变量是什么意思(特别是"总共p个子树分支").

RRB树连接算法的工作原理是什么?

algorithm tree scala clojure data-structures

19
推荐指数
1
解决办法
2441
查看次数

在Clojure中编写一个惰性的,功能性的,交互式的命令行应用程序

我想知道:编写与用户或其他程序通过stdin和stdout交互的Clojure程序的最佳方法是什么?

显然,有可能编写某种命令式循环,但我希望找到一些更懒惰/功能的东西,有点受Haskell的"交互"功能的启发.

command-line functional-programming interactive clojure lazy-evaluation

18
推荐指数
1
解决办法
698
查看次数

Clojure数据结构序列化

我有一个复杂的Clojure数据结构,我想序列化 - 基本上我正在开发的在线游戏的整个当前游戏状态,以便我可以实现保存游戏文件.

我的要求是:

  • 某种形式的人类可读的文本格式(我可能更喜欢s-expressions,JSON和XML,但是对其他人开放)
  • 支持所有常见的Clojure数据结构,关键字和基元
  • 能够为自定义java类,defrecords等提供自定义序列化/反序列化功能(这很重要,因为我需要在几种情况下执行类似Java的readResolve)
  • 良好的表现是一个不错的选择

有什么好建议吗?

java serialization clojure

17
推荐指数
3
解决办法
8423
查看次数

两张地图之间的差异

我需要非常有效地比较Clojure/Java中的两个映射,并返回由Java的.equals(..)确定的差异,其中nil/null等效于"not present".

即我正在寻找一种最有效的方式来编写如下函数:

(map-difference
  {:a 1, :b nil, :c 2, :d 3}
  {:a 1, :b "Hidden", :c 3, :e 5})

=> {:b nil, :c 2, :d 3, :e nil}
Run Code Online (Sandbox Code Playgroud)

我更喜欢不可变的Clojure映射作为输出,但如果性能提升很重要,Java映射也会很好.

对于它的价值,我的基本测试用例/行为期望是对于任何两个映射a和b,以下将是相等的(最多等于null ="Not present"):

a 
(merge b (difference a b))
Run Code Online (Sandbox Code Playgroud)

实现这个的最佳方法是什么?

java algorithm clojure hashmap

17
推荐指数
2
解决办法
9704
查看次数

可视化DAG

我有一个大的有向无环图,我想在位图图像中可视化.

理想情况下,我希望将所有根节点放在图像的顶部,并且底部的所有叶节点,即图形边缘都指向向下的方向.

是否有一个很好的算法来计算满足这些约束的所有节点的坐标并产生良好的可视化效果?

visualization data-visualization graph graph-visualization directed-acyclic-graphs

17
推荐指数
2
解决办法
8658
查看次数

Clojure/Java的分布式计算框架

我正在开发一个应用程序,我需要在一个可能非常大的不同机器集群中分配一组任务.

理想情况下,我想在Clojure中使用一种非常简单,惯用的方法,例如:

; create a clustered set of machines
(def my-cluster (new-cluster list-of-ip-addresses))

; define a task to be executed
(deftask my-task (my-function arg1 arg2))

; run a task 10000 times on the cluster
(def my-job (run-task my-cluster my-task {:repeat 10000})

; do something with the results:
(some-function (get-results my-job))
Run Code Online (Sandbox Code Playgroud)

如果能在集群上做Map-Reduce之类的话也可以获得奖励......

实现这样的目标的最佳方法是什么?也许我可以包装一个合适的Java库?

更新:

感谢Apache Hadoop的所有建议 - 看起来它可能符合要求,但是它看起来有点像矫枉过正,因为我不需要像Hadoop那样使用分布式数据存储系统(即我不需要处理数十亿条记录)...更轻量级的东西,专注于计算任务,如果存在的话,它会更好.

java parallel-processing clojure distributed-computing

17
推荐指数
2
解决办法
5357
查看次数

使用Maven在runnable .jar中捆绑本机依赖项

我有一个在Maven中管理的项目,它有一些本机依赖项(LWJGL).

一切都在开发中工作正常,但现在我想设置Maven,以便它可以构建一个可以重新分发的可运行的.jar文件.特别是,我希望用户可以非常轻松地运行应用程序,而无需乱搞库路径或解压缩本机库等.

目前我能够构建一个包含所有依赖项的.jar文件,但是如果我运行它(不出所料)我得到一个不满意的链接错误:

Exception in thread "main" java.lang.UnsatisfiedLinkError: no lwjgl in java.libr
ary.path
        at java.lang.ClassLoader.loadLibrary(Unknown Source)
        at java.lang.Runtime.loadLibrary0(Unknown Source)
        at java.lang.System.loadLibrary(Unknown Source)
        at org.lwjgl.Sys$1.run(Sys.java:73)
        at java.security.AccessController.doPrivileged(Native Method)
        at org.lwjgl.Sys.doLoadLibrary(Sys.java:66)
        at org.lwjgl.Sys.loadLibrary(Sys.java:95)
        at org.lwjgl.Sys.<clinit>(Sys.java:112)
        at org.lwjgl.opengl.Display.<clinit>(Display.java:132)
        at glaze.TestApp.start(TestApp.java:10)
        at glaze.TestApp.main(TestApp.java:31)
Run Code Online (Sandbox Code Playgroud)

显然,我可以通过手动安装本机库并运行jar来使其工作,java -Djava.library.path=/path/to/libs但这不是我期望用户做的事情.

这是pom.xml,如果它是相关的:https://github.com/mikera/glaze/blob/master/pom.xml

可以设置Maven,以便创建一个包含本机依赖项的可运行.jar,并在双击时成功运行?

java deployment native jar maven

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

Clojure记录实施IFn是一种好习惯吗?

假设我有一个"类似函数"的记录,至少在某种意义上它表示可以应用于某些参数的操作.

通过实现clojure.lang.IFn,我可以使它作为一个函数工作,如:

(defrecord Func [f x]
  clojure.lang.IFn
    (invoke [this arg]
      (f x arg))
    (applyTo [this args]
      (apply f x args)))

 ((->Func + 7) 1)
 => 8
Run Code Online (Sandbox Code Playgroud)

(是的,我知道我刚刚重新实现了partial...... 的劣质版本......这只是一个例子:-))

制作唱片clojure.lang.IFn的好习惯吗?

这种方法有任何陷阱吗?

functional-programming function record clojure

16
推荐指数
1
解决办法
974
查看次数

在Clojure中限制core.async通道

我正在使用带有core.async的Clojure,并且我希望对通过通道处理的消息数量设置速率限制.

特别是我想:

  • 定义速率限制,例如每秒1,000条消息
  • 只要消息数小于速率限制,就可以(并且及时)处理消息
  • 如果超过速率限制,请对事件进行某种明智的替代处理(例如,告诉客户稍后再试)
  • 具有相当低的开销

实现这一目标的最佳方法是什么?

messaging channel clojure core.async

16
推荐指数
3
解决办法
2143
查看次数

相当于Clojure/Java中的Goroutines

我最近很高兴看到关于Go Concurrency模式Google IO谈话

虽然Go的并发方法(灌浆,通道上的通信)明显不同于Clojure(不变性,管理参考,STM),但似乎Go方法在Clojure上下文中的某些情况下仍然有用.

因此,在Clojure或Java中可以直接使用Go的并发原语(可能是库),特别是:

  • channel类似的对象阻塞,直到两端都有读写器
  • 一个select样构造,可以等待在多个通道的结果

PS非常满意Java解决方案,因为它很容易从Clojure中使用

更新自问题最初被问到以来,Clojure现在拥有core.async,它提供了所有这些功能和更多功能.

java concurrency clojure go goroutine

15
推荐指数
1
解决办法
2830
查看次数