小编Y. *_*tin的帖子

主要因素的Clojure尾递归

我正在尝试自学clojure,我正在使用Prime Factor Kata和TDD的原则来实现这一目标.

通过一系列像这样的Midje测试:

(fact (primefactors 1) => (list))

(fact (primefactors 2) => (list 2))

(fact (primefactors 3) => (list 3))

(fact (primefactors 4) => (list 2 2))
Run Code Online (Sandbox Code Playgroud)

我能够创建以下功能:

(defn primefactors 
    ([n] (primefactors n 2))
    ([n candidate] 
        (cond (<= n 1) (list)
              (= 0 (rem n candidate)) (conj (primefactors (/ n candidate)) candidate)
              :else (primefactors n (inc candidate))
        )
    )
)
Run Code Online (Sandbox Code Playgroud)

这很有效,直到我抛出以下边缘案例测试:

(fact (primefactors 1000001) => (list 101 9901))
Run Code Online (Sandbox Code Playgroud)

我最终得到了堆栈溢出错误.我知道我需要将其转换为适当的重复循环,但我看到的所有示例似乎都过于简单,仅指向计数器或数值变量作为焦点.如何进行递归?

谢谢!

recursion tail-recursion clojure prime-factoring

6
推荐指数
3
解决办法
2109
查看次数

Clojure基于优先逻辑从地图中提取值

我有一个函数想要根据优先顺序从地图中提取一个值.目前我正在将它作为一个嵌套的if结构,这是非常可怕的.我不得不相信有更好的方法.

虽然这项工作有更好的方法吗?

(defn filter-relatives [relatives]
    (if(contains? relatives :self)
         (relatives :self)
             (if(contains? relatives :north)
                 (relatives :north)
                     (if(contains? relatives :west)
                         (relatives :west)
                         (if(contains? relatives :east)
                             (relatives :east)
                             (relatives :south)
                         )
                     )
                 )
              )
          )
    )
)
Run Code Online (Sandbox Code Playgroud)

conditional clojure map filter

5
推荐指数
3
解决办法
169
查看次数