【发布时间】:2016-11-29 18:47:27
【问题描述】:
我来自 Java 背景,正在尝试学习 Clojure。由于最好的学习方法是实际编写一些代码,因此我举了一个非常简单的例子,在向量中查找偶数。下面是我写的一段代码:
`
(defn even-vector-2 [input]
(def output [])
(loop [x input]
(if (not= (count x) 0)
(do
(if (= (mod (first x) 2) 0)
(do
(def output (conj output (first x)))))
(recur (rest x)))))
output)
`
此代码有效,但我必须使用全局符号才能使其工作,这很蹩脚。我必须使用全局符号的原因是因为我想在每次在向量中找到偶数时更改符号的状态。 let 不允许我更改符号的值。有没有一种方法可以在不使用全局符号/原子的情况下实现这一点。
【问题讨论】:
-
你为什么要改变输出?只需将其设为循环的另一个参数即可。永远不要在函数中使用
def。除非您在做语言级别的工作,否则从来没有必要。 -
无论如何,这可以像
(filter #(= (rem % 2) 0)) [1 2 3 4])一样解决(对不起,如果我放错括号了。Clojure 很难在手机上编写)。 -
等我回到家,我会写一个答案来详细说明。
标签: clojure