改进clojure代码:深度优先搜索算法 上下文

改进clojure代码:深度优先搜索算法 上下文,clojure,artificial-intelligence,depth-first-search,Clojure,Artificial Intelligence,Depth First Search,作为对自己的锻炼(我正在学习clojure)。我想实现深度优先搜索算法 我是怎么做到的 使用递归 (定义图 {:s{:a3:d4} :a{:s3:d5:b4} :b{:a4:e5:c4} :c{:b4} :d{:s4:a5:e2} :e{:d2:b5:f4} :f{:e4:g1}}) (def堆栈[[:s]]) (目标:g) (定义成本[图表开始目标] (目标(开始图))) (defn hasloop?[路径] (非(=(计数路径)(计数(设置路径')))) (定义目标?[路径] (=目标(最后

作为对自己的锻炼(我正在学习clojure)。我想实现
深度优先搜索
算法

我是怎么做到的 使用递归

(定义图
{:s{:a3:d4}
:a{:s3:d5:b4}
:b{:a4:e5:c4}
:c{:b4}
:d{:s4:a5:e2}
:e{:d2:b5:f4}
:f{:e4:g1}})
(def堆栈[[:s]])
(目标:g)
(定义成本[图表开始目标]
(目标(开始图)))
(defn hasloop?[路径]
(非(=(计数路径)(计数(设置路径'))))
(定义目标?[路径]
(=目标(最后一条路径)))
(已解决定义?[堆栈]
(有些是真的?(映射目标?堆栈)))
(defn addtopath[路径节点]
(联合路径节点)
(defn pop*[堆栈]
(最后一堆)
(defn findpath[堆栈]
(如果(未解决?堆栈))
(让[第一个*(弹出*堆栈)l(最后一个*)]
(findpath(最后一个下降)
(移除hasloop?(懒猫)
(映射#(addtopath first*%)
(键(l图)))堆栈(()()()))
[(第一层)])
如何使用

(findpath堆栈)

问题:
我对如何改进这段代码非常感兴趣。在可读性、效率和性能方面。

不要使用lazy cat,如果您在上面放置最后一个
,您的seq就会实现

Clojure中的递归应该使用
loop
/
recur
来避免堆栈溢出

不要将多个
放在一行上:

(let [first* (pop* stack)
      l      (last first*)]
使用
(如果不是
)而不是
(如果不是
。对于
(不是=
)也一样


使用小写var名称(
graph
,而不是
graph
)。保持类、记录和协议的大小写。

不要使用lazy cat,如果您在上面放置最后一个
,您的seq就会实现

Clojure中的递归应该使用
loop
/
recur
来避免堆栈溢出

不要将多个
放在一行上:

(let [first* (pop* stack)
      l      (last first*)]
使用
(如果不是
)而不是
(如果不是
。对于
(不是=
)也一样


使用小写var名称(
graph
,而不是
graph
)。将大小写保留在类、记录和协议中。

这可能更适合表示感谢!我将问题移至此处。这可能更适合表示感谢!我将问题移至此处