小编gal*_*dre的帖子

对于Doseq(和方法代码太大)

user=> (def r (range 1))
user=> (for [a r, b r, c r, d r, e r, f r, g r, h r :when (and (= 0 a) (not= 1 b))]
          (list a b c d e f g h))
((0 0 0 0 0 0 0 0))
user=> (doseq [a r, b r, c r, d r, e r, f r, g r, h r :when (and (= 0 a) (not= 1 b))]
          (println (list a b c d …
Run Code Online (Sandbox Code Playgroud)

java clojure java-bytecode-asm

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

Clojure最佳实践:何时使用元数据?

我并不是说这是一个主观问题 - 我试图理解为什么with-meta语言正是这样.我意识到它可以用于许多目的(也可以eval,但它在特定情况下的使用是坏设计的标志).从设计角度来看,Clojure的元数据结构有什么独特的用途?它主要用于文档吗?是糖吗?

什么是强大的应用程序with-meta/ meta?在什么情况下这是一个坏主意?你能举例说明如何使用元数据做一些不可能/困难/乏味的事情吗?

clojure

11
推荐指数
1
解决办法
597
查看次数

(gensym)总是独一无二的,`(symb#)不是 - 为什么?

如果我编写一个使用symb#快捷方式创建gensym然后绑定为全局变量的宏,则会反复生成完全相同的符号.但是,如果我gensym手动调用它可以正常工作.很简单的例子:

(defmacro indirection
    [name & body]
    `(do (def name# ~@body)
         (defn ~name [] name#)))

(indirection foo 3)
(foo) ; ? 3
(indirection goo 5)
(goo) ; ? 5
(foo) ; ? 5
Run Code Online (Sandbox Code Playgroud)

如果你使用macroexpand以下问题很明显:

(macroexpand '(indirection foo 3))
(do (def name__2863__auto__ 3) (clojure.core/defn foo [] name__2863__auto__))
(macroexpand '(indirection foo 3))
(do (def name__2863__auto__ 3) (clojure.core/defn foo [] name__2863__auto__))
Run Code Online (Sandbox Code Playgroud)

如果我gensym长途跋涉,这个问题就会消失:

(defmacro redirection
    [name & body]
    (let [rename (gensym)]
        `(do (def ~rename ~@body)
             (defn ~name …
Run Code Online (Sandbox Code Playgroud)

clojure

9
推荐指数
1
解决办法
312
查看次数

(另一个)Clojure中循环重复的堆栈溢出

类似的问题:,,.

我在这里彻底搞砸了.我正在使用循环重复形式,我正在使用doall,但我仍然得到大循环的堆栈溢出.我的Clojure版本是1.5.1.

背景:我正在训练神经网络来模仿XOR.该功能xor是前馈功能,接受权重和输入并返回结果; 该函数b-xor是反向传播函数,它根据最后一次调用的结果返回更新的权重xor.

以下循环运行得很好,运行速度非常快,并返回结果,并根据返回的结果,完美地训练权重:

(loop [res 1        ; <- initial value doesn't matter
       weights xorw ; <- initial pseudo-random weights
       k 0]         ; <- count
  (if (= k 1000000)
      res
      (let [n (rand-int 4)
            r (doall (xor weights (first (nth xorset n))))]
        (recur (doall r)
               (doall (b-xor weights r (second (nth xorset n))))
               (inc k)))))
Run Code Online (Sandbox Code Playgroud)

但是,当然,这只能给我最后一次运行的结果.显然我想知道为了获得这个结果而训练了多少重量!以下循环,只返回值更改,溢出:

(loop [res 1
       weights xorw
       k 0] …
Run Code Online (Sandbox Code Playgroud)

clojure

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

在Clojure中创建自定义空白

在Clojure中,逗号被视为空格.这有一个简单的目的:它帮助人们阅读代码.

我想指定另一个字符应该被视为空格.这可能吗?

如果你很好奇,那就是ε/ε.如果我可以输入(for [i ? set1, j ? set2] (* i j)),我认为这很可爱.

提前致谢.

clojure

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

Clojure:列表中的复杂迭代?

我想拿一个数字,20和一个列表.'(1 2 3 4 5 6 7 8 9 10),并返回一个集合,其中包含原始列表中每个值的两个值:当使用该值潜水20时,原始值与余数配对.如果原始值以某种方式键入剩余部分会很好,这样我就可以轻松地检索产生特定余数的每个数字.基本上我想要一些功能func:

user=> (func 20 '(1 2 3 4 5 6 7 8 9 10))
'(:0 1, :0 2, :2 3,... :20 0)
Run Code Online (Sandbox Code Playgroud)

然而,我正在寻找如何遍历列表的难以置信的困难时期.有人可以帮助我理解如何独立使用列表的元素,然后如何返回20除以的元素,如果它返回一个余数?

我的想法是在计算平方根的程序中使用这样的东西.如果数字由余数键入,那么我可以查询集合以获得将输入除以0的余数的所有数字.


这是我的初步方法.

;; My idea on the best way to find a square root is simple.
;; If I want to find the square root of n, divide n in half
;; Then divide our initial number (n) by all numbers in the range …
Run Code Online (Sandbox Code Playgroud)

loops if-statement list clojure square-root

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