【发布时间】:2016-03-17 03:58:47
【问题描述】:
在谜语中,我必须完成以下表达式才能评估为真。必须有一个插入,适合所有人。
(= 15 (reduce __ [1 2 3 4 5]))
(= 0 (reduce __ []))
(= 6 (reduce __ 1 [2 3]))
第三个表达式提供一个起始值。因此,我的替代品无法提供另一个。
这个函数将通过第一和第三个真值测试:
#(+ %1 %2)
但是,第二个表达式会产生以下错误:
clojure.lang.ArityException: 传递给 (...my function id) 的 args (0) 数量错误
看起来通常只有当起始值 + 集合的长度大于 2 时,reduce 才会调用给定函数。如果这个长度为 0,就像上面的情况一样,它也会被调用 - 使用 0 个参数。
有人提示如何在这里进行吗?
【问题讨论】:
-
提示:
(+)的结果是什么? -
谢谢!当然,再简单不过了! (同时我的解决方案是:(fn [& more] (if (= (count more) 0) 0 (apply + more))) ha, ha)
-
很高兴它有帮助,您仍然可以简化很多;) 如果您正在使用 4clojure,请不要犹豫查看其他解决方案。
-
(+)不是平手吗? -
我试图在 stackoverflow 中回答我的问题,但至少有 30 个字符。太糟糕了。一个字符没有机会。
标签: clojure functional-programming