相关疑难解决方法(0)

将多个谓词函数组合成一个

是否可以撰写例如:

(defn- multiple-of-three? [n] (zero? (mod n 3))
(defn- multiple-of-five? [n] (zero? (mod n 5))
Run Code Online (Sandbox Code Playgroud)

成:

multiple-of-three-or-five?
Run Code Online (Sandbox Code Playgroud)

所以我可以用它来过滤:

(defn sum-of-multiples [n]
  (->> (range 1 n)
       (filter multiple-of-three-or-five?)
       (reduce +)))
Run Code Online (Sandbox Code Playgroud)

另外我不想像这样定义它:

(defn- multiple-of-three-or-five? [n]
  (or (multiple-of-three? n)
      (multiple-of-five? n)))
Run Code Online (Sandbox Code Playgroud)

例如,使用Javascript模块Ramda,它将实现为:http://ramdajs.com/docs/#either

const multipleOfThreeOrFive = R.either(multipleOfThree, multipleOfFive)
Run Code Online (Sandbox Code Playgroud)

functional-programming clojure composition

5
推荐指数
1
解决办法
207
查看次数