改进clojure代码:深度优先搜索算法 上下文
作为对自己的锻炼(我正在学习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?[路径] (非(=(计数路径)(计数(设置路径')))) (定义目标?[路径] (=目标(最后
深度优先搜索
算法
我是怎么做到的
使用递归
(定义图
{: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
)。将大小写保留在类、记录和协议中。这可能更适合表示感谢!我将问题移至此处。这可能更适合表示感谢!我将问题移至此处