【发布时间】:2018-01-20 11:11:01
【问题描述】:
是否可以作例如:
(defn- multiple-of-three? [n] (zero? (mod n 3))
(defn- multiple-of-five? [n] (zero? (mod n 5))
进入:
multiple-of-three-or-five?
所以我可以用它来过滤:
(defn sum-of-multiples [n]
(->> (range 1 n)
(filter multiple-of-three-or-five?)
(reduce +)))
我也不想这样定义:
(defn- multiple-of-three-or-five? [n]
(or (multiple-of-three? n)
(multiple-of-five? n)))
例如,使用 Javascript 模块 Ramda 可以这样实现:http://ramdajs.com/docs/#either
const multipleOfThreeOrFive = R.either(multipleOfThree, multipleOfFive)
【问题讨论】:
-
您需要执行
or,您可以将现有的两个表达式合并为一个新的multiple-of-three-or-five?=(or (zero? (mod n 3)) (zero? (mod n 5))),这将消除另外1-2个函数调用。跨度> -
是的,但是想象一下 2 个更复杂的不同含义的谓词函数。最好把它们分开。我只是想了解如何在 clojure 中实现它(即使存在库)。
-
好 ol' fizzbuzz 嗯?
标签: clojure functional-programming composition