Что такое Clojure-эквивалент Ruby's select? - PullRequest
3 голосов
/ 21 июля 2010

Я хочу вернуть список / коллекцию всех чисел в диапазоне, кратном 3 или 5.

В Ruby я бы сделал

(1..1000).select {|e| e % 3 == 0 || e % 5 == 0}

В Clojure я думаю, что мог бы сделать что-то вроде ...

(select (mod 5 ...x?) (range 0 1000))

Ответы [ 4 ]

5 голосов
/ 21 июля 2010

Другой способ - создать решение, а не фильтровать его:

(set (concat (range 0 1000 3) (range 0 1000 5)))
5 голосов
/ 21 июля 2010
(filter #(or (zero? (mod % 3)) (zero? (mod % 5))) (range 1000))
3 голосов
/ 21 июля 2010
(filter #(or (= (mod % 5) 0) (= (mod % 3) 0)) (range 1 100))

- самый прямой перевод.

(for [x (range 1 100) :when (or (= (mod x 5) 0) (= (mod x 3) 0))] x)

- это еще один способ сделать это.

Вместо выполнения (= .. 0) вы можете использовать ноль?функция вместоВот исправленное решение:

(filter #(or (zero? (mod % 5)) (zero? (mod % 3))) (range 1 100))
1 голос
/ 21 июля 2010

как насчет этого: http://gist.github.com/456486

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...