需要Clojure中任意数字的前10个倍数
我们的任务是打印任何数字的前十个倍数,我们已经为这些数字编写了下面的代码。这是一个错误。简单地说,如果n是2,那么我们需要创建一个2到10的表需要Clojure中任意数字的前10个倍数,clojure,Clojure,我们的任务是打印任何数字的前十个倍数,我们已经为这些数字编写了下面的代码。这是一个错误。简单地说,如果n是2,那么我们需要创建一个2到10的表 (defn multiples [n] (while ( n < 11) (println( n * n)) (swap! n inc))) (def n (Integer/parseInt (clojure.string/trim (read-line)))) (multiples
(defn multiples [n]
(while ( n < 11)
(println( n * n))
(swap! n inc)))
(def n (Integer/parseInt (clojure.string/trim (read-line))))
(multiples n)
您可以循环并打印每个元素的结果列表
(for [i (multiples 2)]
(println i))
;; or:
(map println (multiples 2)) ;; though one usually doesn't apply
;; `map` on side effect functions ...
要改进您自己的构造,请执行以下操作:
你来自命令式语言,尝试处理变异。
这是非常不习惯的clojure。
但是,通过声明一个值atom,您可以使用@operator访问它的位置。并改变变量的值
(defn multiples [n]
(let [i (atom 1)] ;; i is an atom
(while (< @i 11) ;; @i is the value saved into i
(println (* @i n))
(swap! i inc)))) ;; and correctly you can increase the value
看看迭代函数是做什么的
[n]的defn倍数
迭代部分*n
定义十的十倍
取10的10倍
编辑:我误解了问题的作者,我相信他只是想生成一系列的正方形。这里有一种使用传感器的方法,原因是为什么不
def xf
公司
地图公司
地图*%%
defn一阶n平方[n]
进入[]xf取n范围
可以在循环中使用“重现”:
(defn multiples [n]
(if (< n 11)
(do ; then
(println (* n n))
(recur (inc n)))
nil)) ; else return nil
在某种程度上,REPL将产生
1
4
9
16
25
36
49
64
81
100
nil
我们如何在这里添加println实际上println不是很习惯用法-这是一个副作用。但我会告诉你。输入stdin2你的输出stdout~无输出~在repl中总是有输出。你通常都是这样做的。但是,是的,就像我展示的那样,使用for循环。这很酷!:-但它首先给出了一个错误。我想OA想要1。。11*在这种情况下,我认为更容易使用范围。错误在哪里?哦,我明白了,OP只是想要一系列的平方米。然后像@Gwang JinKim这样的简单映射就可以了。使用take进行迭代是一个有趣的构造,但是因为这里的增加只是inc,一个简单的范围就可以了。但在其他情况下,迭代可能会给出更有趣的解决方案,尤其是增加值将取决于每个步骤之前的值…我用更复杂的解决方案更新了我的答案,lol;一般来说,map*%%范围为1 n是一种可行的方法。
(defn multiples [n]
(for [i (range 1 11)]
(println (* i n))))
(defn multiples [n]
(if (< n 11)
(do ; then
(println (* n n))
(recur (inc n)))
nil)) ; else return nil
(multiples 1)
1
4
9
16
25
36
49
64
81
100
nil