gpt4 book ai didi

tree - OCaml 中多路树的最大值

转载 作者:行者123 更新时间:2023-12-04 18:44:36 25 4
gpt4 key购买 nike

我是一名 IT 学生,也是 OCaml 的新手

最近,为了考试而学习,我发现了这个练习。

鉴于:
type 'a tree = Tree of 'a * 'a 树列表

定义一个函数 mtree : 'a tree ->'a,它返回多路树中所有节点的最大值,遵循 OCaml (<=) 中通常的顺序关系

我来做下面这样的事情,当然,这是行不通的。

let rec mtree (Tree (r, sub)) =
let max_node (Tree(a, l1)) (Tree(b, l2)) =
if a >= b then (Tree(a, l1)) else (Tree(b, l2)) in
List.fold_left max_node r sub;;

在阅读了这个答案后,我发布了固定代码。
let rec mtree (Tree(r,sub)) =
let max_node (Tree(a, l1)) (Tree(b, l2)) =
if a >= b then a else b in
List.fold_left (max_node) r (List.map mtree sub);;

想法是一样的,折叠列表比较节点,使用我的本地函数来这样做,并通过在连续级别的节点列表上调用函数本身来遍历树。

尽管如此,仍然无法正常工作。现在在 fold_left 部分提示 max_node。
Error: This expression has type 'a tree -> 'a tree -> 'a
but an expression was expected of type 'a tree -> 'a tree -> 'a tree

在这里我肯定迷路了,因为我不明白为什么它期望返回一棵树

最佳答案

这段代码非常可信(恕我直言)。缺少的关键是它不会遍历子树的子树。请注意,您将函数定义为递归(这是非常合理的),但它从不调用自身。

需要指出的另一个问题是问题陈述要求树中的“值”,但您的代码返回的是整个树节点。

关于tree - OCaml 中多路树的最大值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17370809/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com