Zacząłem robić Projekt Euler za pomocą Clojure, jako pierwsze narzędzie do nauki Clojure. Mam rozwiązać pierwszą Zadanie:Czy to idiomatyczne Clojure?
Znajdź sumę wszystkich wielokrotności 3 lub 5 poniżej 1000.
ja wcześniej rozwiązać go w Pythonie:
sum(i for i in xrange(1000) if i%3==0 or i%5==0)
To jest moja pierwsza próba Clojure:
(reduce +
(filter
(fn [x]
(or
(= 0 (mod x 3))
(= 0 (mod x 5))))
(range 1000)))
Jestem naprawdę zaskoczona, jak bardzo było to pełne, ale ja Jestem pewien, że to ze względu na mój styl i nieznajomość idiomów Clojure.
Jak wyglądałaby idiomatyczna wersja tego kodu Clojure?
Wielkie dzięki, że czyści go całkiem sporo! jaka byłaby korzyść z zastosowania metody Apply vs Reduction? – gumuz
'+' ma zmienną aritę, więc uniemożliwia nam wielokrotne wykonywanie '+'. W rzeczywistości jest to równoważne użyciu 'reduce', ponieważ' + 'używa' reduce' gdy lista arg przekracza 2 (zobacz źródło '+'). W tym przykładzie jest to po prostu mój styl bardziej niż cokolwiek innego. – Kyle
Jeszcze raz dziękuję, czy jest jakiś przewodnik po stylu, który na przykład zaleca sposób wyrównania argumentów? – gumuz