我已經開始使用Clojure進行Project Euler,作爲第一次嘗試學習Clojure。我已經解決了第一個任務:這是慣用的Clojure嗎?
找到3所有倍數低於1000
總和或5我以前解決它在Python:
sum(i for i in xrange(1000) if i%3==0 or i%5==0)
這是我第一次嘗試Clojure:
(reduce +
(filter
(fn [x]
(or
(= 0 (mod x 3))
(= 0 (mod x 5))))
(range 1000)))
我真的很驚訝它有多冗長,但我我很確定這是因爲我的風格和對Clojure成語的無知。
這個Clojure代碼的慣用版本是什麼樣的?
非常感謝,這清除它頗有幾分!使用apply vs reduce會有什麼好處? – gumuz 2013-03-14 17:05:21
'+'具有可變參數,因此它阻止我們多次執行'+'。實際上,這相當於使用'reduce',因爲'+'在arg列表超過2時使用'reduce'(請參閱'+'的源代碼)。在這個例子中,這實際上只是我的風格而已。 – Kyle 2013-03-14 17:07:15
再次感謝,是否有一些風格指南,例如,提倡您對齊或參數的方式? – gumuz 2013-03-14 17:11:16