Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
需要Clojure中任意数字的前10个倍数_Clojure - Fatal编程技术网

需要Clojure中任意数字的前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

我们的任务是打印任何数字的前十个倍数,我们已经为这些数字编写了下面的代码。这是一个错误。简单地说,如果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 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