2013-11-21 49 views
0
user> (for [n '(9) d '(2 3 5 7) :while (not= 0 (mod n d))] n) 

它給我,使用換,同時或一些其他順序功能

user> (9) 

如果我更改順序列表中的這個樣子,

user> (for [n '(9) d '(2 5 3 7) :while (not= 0 (mod n d))] n) 

然後它給了我,

user> (9 9) 

其實,我試圖得到一個空的列表,如果整數n可被任何整數的序列d整除;否則n。所以,問題是,是否有任何功能,或幾個組合,可以做到這一點?或者我必須使用loop-recurr或遞歸的東西嗎?

+1

嗨@AdeelAnsari,我認爲'(n)不是一個整數,而是一個整數的序列,你對這個概念嗎? – tangrammer

+0

是的,這是一個'seq'。實際上,'for'函數中不允許使用'integer'。對於那個很抱歉。我的意思是它可以是一個數字,如果一些功能是好的。 –

回答

2

我認爲你正在尋找的功能是filter

返回coll的項目的懶惰序列,其中(pred項目) 返回true。 pred必須沒有副作用。

下面的函數,divisible-by-fn,返回按n

(defn divisible-by-fn [your-integer your-seq] 
    (filter #(zero? (mod your-integer %))your-seq)) 
(divisible-by-fn 9 '(2 5 3 7)) 
=>(3) 

是可分的seq數...但是,在情況下,你需要得到一個空列表,如果該整數n可以被d中的任何整數整除seq;否則n,然後

(defn your-fn [your-integer your-seq] 
(if-not (not-any? #(zero? (mod your-integer %))your-seq) 
() 
your-integer) 
) 
(your-fn 9 '(2 5 3 7)) 
=>() 
(your-fn 11 '(2 5 3 7)) 
=> 11 
+0

我喜歡這個。等一下,讓我試試。 –

+0

我想,我不能用這個,'(filter#(zero?(mod your-integer%))your-seq)'作爲'recur'的參數。因爲它是一個懶惰的序列。我對麼? –

+0

我已經使用(next ..)函數作爲遞歸函數的參數,所以很明顯,您可以在遞歸函數或循環函數中使用懶序列,對此沒有任何問題! – tangrammer