Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Clojure 理解重现_Clojure_Tail Recursion - Fatal编程技术网

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。