如何在OCaml中编写一个函数,返回从一个节点到另一个长度小于给定深度的节点的路径



我试图创建一个函数,在给定一个图、一个开始节点(start(、一个结束节点(target(和一个最大深度的情况下,仅当其深度为<如果不是,则会引发错误。我想不出在OCaml中实现这一点的方法,因为我不能使用递增变量并将其与最大深度进行比较。这就是我目前所做的:

let grafo = [(1,4); (1,2); (2,4); (3,2); (3,6);
(4,4); (4,3); (4,5); (5,6); (6,3)];;
let rec vicini x = function
[] -> []
| (a, b)::rest -> 
if a = x then b :: vicini x rest
else vicini x rest;;

exception NotFound;;
(* main function *)
let test_connessi g start goal depth =
let rec from_node visited n = 
if List.mem n visited then raise NotFound
else if n = goal then [n]
else n :: from_list (n :: visited) (vicini n g)

and from_list visited = function
[] -> raise NotFound
| n::rest ->
try from_node visited n 
with NotFound -> from_list visited rest
in 
start :: from_list [] (vicini start g);;

我如何实现深度的东西?

我如何实现深度的东西?

与您实现访问的内容完全相同。只需在递归函数中添加一个额外的参数,然后将(depth+1(传递给递归调用。这是递增变量的函数样式。将变量的新值传递给递归调用。

相关内容

最新更新