【问题标题】:if a function returns true then return a tree with all nodes for which the function returns true如果函数返回 true,则返回一棵树,其中包含函数返回 true 的所有节点
【发布时间】:2019-11-22 04:31:03
【问题描述】:

谁能告诉我为什么我的函数在“f v”左右时不起作用我收到此错误“此表达式具有 int 类型但表达式应为树类型”

 let rec function1 t f=match t with
|Nil->Nil
|T(l,v,r)->if f l v r then T( function1 l f, f v,  function1 r f) else T(l,v,r)

let f x= x mod 2=0;;
type tree = Nil | T of tree * int * tree;;

树需要先序遍历

【问题讨论】:

  • 您的条件中的调用 f l v r 和重构树中的 f v 不匹配和/或没有意义。你想在函数中传递什么来测试,你希望返回的树看起来像什么?
  • 我希望我的树只包含函数 f=x mod 2=0 返回 true 的节点
  • 是的,鉴于该函数只有一个参数,您不应传递三个参数。您还希望返回相同的节点,而不是作为值的布尔树。
  • 如果节点返回 false 会发生什么?你是忽略它的左右分支还是继续它的左右分支?

标签: ocaml


【解决方案1】:

f l v r 使编译器认为f 是一个带有 3 个参数的函数。我想你想要的是f v

另外,如果你希望这棵树只包含偶数值的节点,这个分支应该是这样的:

|T(l,v,r)->if f v then T( function1 l f, v, function1 r f) else Nil

这样会保留偶数值v的节点,并在其左右子树上递归,但如果数值是奇数,则切断该节点及其子节点。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-02-17
    • 1970-01-01
    • 1970-01-01
    • 2018-01-04
    • 2017-02-06
    • 1970-01-01
    • 1970-01-01
    • 2016-09-10
    相关资源
    最近更新 更多