2016-02-16 19 views
2

我想返回一个数字的因子,并且这些因子应该在给定的范围内。像:如何在clojure中判断为真时返回相应的数字

user=> (factors (range 1 10) 12) 
(1 2 3 4 6) 

我写了一些代码,但他们返回true或false。我的代码是:

(defn factors [range num] 
    (map #(= (mod num %) 0) range)) 

测试结果:

user=> (factors (range 1 10) 12) 
(true true true true false true false false false) 

我怎样才能获得的数量(1 2 3 4 6),而不是真假?非常感谢!

回答

8

使用filter

(defn factors [candidates num] 
    (filter #(zero? (mod num %)) candidates)) 

例子:

(factors (range 1 10) 12) 
;=> (1 2 3 4 6) 
+0

了你!非常感谢! –

+1

我会避免使用'range'作为名称,因为它是一个相关的标准函数。这也是一种误导,因为任何数字序列都会这样做 - 它不一定是一个范围。例如'(因素[2 8 9] 12)=>(2)'。也许'候选人'会适合。 – Thumbnail

+0

@Thumbnail同意。我刚刚使用'范围'因为它是在原来的问题;我更新了我的答案,而不是使用'candidates'。 –

相关问题