小编Art*_*ldt的帖子

将事件从erlang传递给Clojure

我正在寻找一种在Clojure和erlang之间来回传递事件的方法.

  • 以前有人这样做过吗?
  • 我应该如何以易于改变的一般方式编码(不可变的)消息?
  • IPC应该用于此吗?什么样的?
  • 你过去哪里出错了?

erlang ipc clojure

5
推荐指数
1
解决办法
313
查看次数

我可以发送包含一些 gpl3 类的“lein uberjar”吗?

我有一个在 GPLv3 下发布的项目,它需要 clojure.jar 和 clojure-tontrib.jar 才能运行。我真的很想和所有这些一起发送一个大 jar 文件。(也许还有 license.txt)

  • 如果这与许可证保持一致,有没有人知道明确的法律解释*?
  • 我可以在我的 license.txt 中指定它来解决任何冲突吗?
  • 你能指出一些已经在做这个的项目吗?

*我不是在寻求法律建议,也不会这样解释任何回应。

licensing gpl jar clojure epl

5
推荐指数
1
解决办法
568
查看次数

持久数据结构如何帮助使Om更快

Om,反应的clojurescript包装,据说非常快,因为它利用了不变性.我无法理解持久性数据结构如何在这里提供帮助.

我所理解的是应用状态是一个原子.此状态传递给返回虚拟DOM节点的函数(om组件),因此创建当前虚拟DOM与其先前状态之间差异的"补丁"比直接在实际DOM上操作要好得多.

但是持久数据结构可以在这里提供帮助吗

(def app-state (atom {:foo {:counter 0}))
(om/root click-counter app-state {:target ...}) 
Run Code Online (Sandbox Code Playgroud)

例如,click-counter渲染一个按钮,单击该按钮会增加计数器.所以过渡函数看起来像这样:

(dom/button #js {:onClick #(om/transact! app [:foo :counter] inc)} 
            (str "clicked " (-> app :foo :counter) " times"))
Run Code Online (Sandbox Code Playgroud)

我没有理解这一点:onClick执行时clojurescript创建一个新的地图(非常有效),如下所示:

{:foo {:counter 1}}
Run Code Online (Sandbox Code Playgroud)

app-state现在指向新的地图.此时Om意识到状态已经改变,因为它只是一个等式检查的问题.

这里的问题是Om应该仍然计算整个旧虚拟DOM和新虚拟DOM之间的差异.它不知道只是计数器被改变了.

我的错误在哪里?

clojure clojurescript om

5
推荐指数
1
解决办法
173
查看次数

Clojure中最大的公约数

我已经编写了以下代码来计算两个正数的最大公约数.在代码中是否存在一些不是最优或足够的问题,如果是这样的话,那么做GCD的更多cloujerian方式是什么?

(def gcd (fn [a b] (->> (map (fn [x]
                                 (filter #(zero? (mod x %)) (range 1 (inc x))))
                        [a b])
                        (map set)
                        (apply clojure.set/intersection)
                        (apply max))))

(gcd 1023 858)` => 33
Run Code Online (Sandbox Code Playgroud)

clojure greatest-common-divisor

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

如何在Clojure中泄漏内存?

周四在Bay Area Clojure Meetup上的一个演示文稿中,我正在编写一个在Clojure中泄漏内存的方法列表.

到目前为止,我有:

  • 抓住无限序列的头部
  • 通过在循环中调用lambda来创建许多泛型类(这仍然是一个问题)
  • 持有对未使用数据的引用
  • ...

还有什么?

memory-leaks clojure

4
推荐指数
1
解决办法
1946
查看次数

以编程方式使用硬件随机数生成器

我正在使用桌面应用程序,并且很乐意使用碰巧可用的任何硬件随机数生成器,但我不希望用户必须使用任何令人困惑的设置来使用它.它的Java/Clojure基于Java世界的东西会很好,虽然我愿意和任何事情一起工作.知道任何做得好的程序吗?他们跨平台吗?

java random cryptography desktop-application clojure

4
推荐指数
1
解决办法
947
查看次数

Erlang DETS有多大,如果它太小,该怎么办?

我需要的只是Erlang中的一个大型持久查找表,而dets似乎就是这样的东西,虽然我需要一个明确的答案:

  • 表中二进制文件的总大小可以是多大.
  • 每个条目有多大
  • 如果第一个问题的答案小于100G该怎么办

erlang dets

4
推荐指数
1
解决办法
1298
查看次数

Clojure的滚动平均序列

我正在寻找一种优雅的方法来生成一系列数字的滚动平均值序列.希望比使用lazy-seq更优雅

clojure

4
推荐指数
3
解决办法
1586
查看次数

如何将测试映射到数字列表

我有一个bug的函数:

user> (-> 42 int-to-bytes bytes-to-int)
42
user> (-> 128 int-to-bytes bytes-to-int)
-128
user> 
Run Code Online (Sandbox Code Playgroud)

看起来我需要在转换回来时处理溢出...

最好写一个测试,以确保再也不会发生这种情况.这个项目使用的是clojure.contrib.test-是这样我写的:

(deftest int-to-bytes-to-int
  (let [lots-of-big-numbers (big-test-numbers)]
    (map #(is (= (-> %
                     int-to-bytes
                     bytes-to-int)
                 %))
         lots-of-big-numbers)))
Run Code Online (Sandbox Code Playgroud)

这应该是测试转换为seq的字节然后再次在10000个随机数的列表上产生原始结果.理论上看起来不错?除了没有任何测试运行.

Testing com.cryptovide.miscTest

Ran 23 tests containing 34 assertions.
0 failures, 0 errors.
Run Code Online (Sandbox Code Playgroud)
  • 为什么不进行测试?
  • 我该怎么办才能让他们跑步?

unit-testing clojure

4
推荐指数
1
解决办法
112
查看次数

将元数据添加到延迟序列

当我尝试在Clojure中向无限延迟序列添加元数据时,我得到了堆栈溢出,如果我取消元数据,那么它可以正常工作.为什么添加with-meta宏打破了懒惰的seq?

首先创建一个非常好的数字的无限序列:

(defn good []
  (lazy-seq 
    (cons 42
      (good))))

user> (take 5 (good))
(42 42 42 42 42)

然后,为每个lazy-seq实例添加一些元数据:

(defn bad []
  (lazy-seq 
    (cons 42
      (with-meta 
       (bad)
       {:padding 4}))))


user> (take 5 (bad))
java.lang.StackOverflowError (NO_SOURCE_FILE:0)
  [Thrown class clojure.lang.Compiler$CompilerException]

尝试将元数据上移一级:

(defn also-bad []
  (with-meta 
   (lazy-seq 
     (cons 42
       (also-bad)))
   {:padding 4}))

user> (take 5 (foo))
java.lang.StackOverflowError (NO_SOURCE_FILE:0)
  [Thrown class clojure.lang.Compiler$CompilerException]

以下是有限序列的元数据示例:

(defn also-works []
     (lazy-seq 
       (cons 4 
         (with-meta 
          () 
          {:a 5}))))

user> (also-works)
(4)
user> (meta (rest (also-works)))
{:a 5} …

lisp clojure lazy-sequences

3
推荐指数
1
解决办法
328
查看次数