Bagaimana cara mengembalikan nomor yang sesuai ketika prediksinya benar di clojure

Saya ingin mengembalikan faktor suatu bilangan, dan faktor tersebut harus berada dalam kisaran tertentu. Menyukai:

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

Saya menulis beberapa kode, tetapi hasilnya benar atau salah. Kode saya adalah:

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

hasil tes:

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

Bagaimana cara mendapatkan angka (1 2 3 4 6) selain benar dan salah? Terima kasih banyak!


person Xiufen Xu    schedule 16.02.2016    source sumber


Jawaban (1)


Gunakan filter:

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

Contoh:

(factors (range 1 10) 12)
;=> (1 2 3 4 6)
person Sam Estep    schedule 16.02.2016
comment
Kena kau! Terima kasih banyak! - person Xiufen Xu; 16.02.2016
comment
Saya akan menghindari penggunaan range sebagai nama, karena ini adalah fungsi standar yang relevan. Ini juga menyesatkan, karena rangkaian angka apa pun bisa digunakan - tidak harus berupa rentang. Misalnya, (factors [2 8 9] 12) => (2). Mungkin candidates cocok. - person Thumbnail; 16.02.2016
comment
@Thumbnail Setuju. Saya baru saja menggunakan range karena itu ada di pertanyaan awal; Saya memperbarui jawaban saya untuk menggunakan candidates sebagai gantinya. - person Sam Estep; 16.02.2016