Clojure 理解重现
正在尝试这段代码,但似乎不太正常Clojure 理解重现,clojure,tail-recursion,Clojure,Tail Recursion,正在尝试这段代码,但似乎不太正常 (defn- multiple_of? [div num] (= (mod num div) 0)) (defn sum_of_multiples_from ([start] (sum_of_multiples_from start 0)) ([start total] (if (<= start 0) total (recur (dec start) (or (multiple_of? 3 start) (m
(defn- multiple_of?
[div num]
(= (mod num div) 0))
(defn sum_of_multiples_from
([start] (sum_of_multiples_from start 0))
([start total]
(if (<= start 0)
total
(recur (dec start) (or (multiple_of? 3 start) (multiple_of? 5 start)
(+ total start) start)))))
但是我不知道为什么,我是clojure的新手,所以我正在尝试掌握recur。只要start是3的倍数,您的
或调用就会返回一个布尔值((3的倍数开始)
)
在Clojure中,或
总是返回它的一个参数——如果存在,则返回第一个真实参数,否则返回最后一个错误参数。只要start是3的倍数,您的或
调用就会返回一个布尔值((3的倍数开始)
)
在Clojure中,或
总是返回它的一个参数——如果存在,则返回第一个真实的参数,否则返回最后一个错误的参数。您确实希望为递归
使用一个条件表达式,并且该表达式总是返回一个数字。例如:
(defn sum_of_multiples_from
([start] (sum_of_multiples_from start 0))
([start total]
(if (<= start 0)
total
(recur (dec start)
(if (or (multiple_of? 3 start) (multiple_of? 5 start))
(+ total start)
total)))))
(reduce + (filter #(or (multiple_of? 3 %) (multiple_of? 5 %)) (range 50)))
=> 543
您确实需要为递归
创建一个条件表达式,并且该表达式总是返回一个数字。例如:
(defn sum_of_multiples_from
([start] (sum_of_multiples_from start 0))
([start total]
(if (<= start 0)
total
(recur (dec start)
(if (or (multiple_of? 3 start) (multiple_of? 5 start))
(+ total start)
total)))))
(reduce + (filter #(or (multiple_of? 3 %) (multiple_of? 5 %)) (range 50)))
=> 543
clojure的方法是用if来包装它吗?类似于(if(或3次启动的多次启动)(5次启动的多次启动)(+总启动)启动)
或者我离(if(或3次启动的多次启动)…
将测试函数多次启动
,而不调用它。你需要父母打电话<代码>(如果(或(3次启动的多次启动)(5次启动的多次启动))…)
clojure的方法是将其包装在if中吗?类似于(if(或3次启动的多次启动)(5次启动的多次启动)(+总启动)启动)
或者我离(if(或3次启动的多次启动)…
将测试函数多次启动
,而不调用它。你需要父母打电话<代码>(如果(或(3次启动的多次启动)(5次启动的多次启动))…)
我最终做了一些类似于您的优化解决方案的事情。我没有使用reduce,而是使用apply。我最终做了一些类似于您的优化解决方案的事情。我用apply代替reduce。