首页 > 解决方案 > OCaml 中的递归函数

问题描述

我有这部分代码使用这种格式在图中找到下一个节点:

当前节点->(操作员,成本,下一个节点的名称)列表

let opPoss =(function
      "A" -> [('h',4,"B");('b',10,"C")]
    | "B" -> [('b',2,"C");('h',4,"D")]
    | "C" -> [('b',6,"F")]
    | "D" -> [('b',2,"C")]

这个找到每个节点的权重:

let  hEtat = (function
    "A" -> 8
  | "B" -> 3
  | "C" -> 2
  | "D" -> 5
  |  _ -> 0 );;

我必须实现一个函数,该函数以这种格式返回每个节点的下一个节点列表:

(节点名称、成本、重量)

,所以我尝试了这个:

let creerLesFils etat g opPoss hEtat=
  let liste = opPoss etat in let rec creer liste g opPoss hEtat= match liste with
        []->[] 
      |(a, b, c)::t->(c, b, hEtat c)::creer t g opPoss hEtat;;

但它不起作用,它向我展示了这一点:

;; 第 4 行,字符 45-47:错误:语法错误

如何正确实现递归?

标签: listrecursiongraphocaml

解决方案


您的语法错误是您let rec没有以下内容in

本质上,您定义了一个名为的本地函数,creer但您从不将定义用于任何事情。

您可以尝试在代码末尾添加类似这样的内容:

in
creer liste g opPoss hEtat

(这很难回答,因为代码的格式不可读。您可以使用自动缩进工具,或手动缩进。)


推荐阅读