Hel*_*kin 5 functional-programming function clojure
我是clojure的新手,我想创建一个函数,它返回某个Number的所有除数的向量.
例如:
[1 2 3]为6作为输入
(defn div [x seq]
(let [r (range 1 (+ (/ x 2) 1)) ]
(dotimes [i (count (range 1 (+ (/ x 2) 1) ))]
(cond
(= (mod x (nth r i )) 0)(print (conj seq (nth r i )))
))))
Run Code Online (Sandbox Code Playgroud)
此函数以下列格式返回输出:
[1] [2] [4] [5] [10] [20] [25] [50]为100,但我想在一个向量中获得输出.似乎seq变量不断被每个循环步骤覆盖.谁能解释这种行为并为我提供一个解决方法?
在此先感谢您的问候
Gui*_*ler 10
您可以使用更惯用的解决方案来避免循环:
(defn divisors
[n]
(filter (comp zero? (partial rem n)) (range 1 n)))
Run Code Online (Sandbox Code Playgroud)
我认为你的做法不正确,你可以看看:
这段代码(使用“ for ”函数)可以轻松解决您的规范
(let [n 100]
(for [x (range 1 n)
:when (zero? (rem n x))]
x))
=>(1 2 4 5 10 20 25 50)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
906 次 |
| 最近记录: |