繁体   English   中英

计算逻辑表达式的高度

[英]Calculating height of a logical expression

我的任务是计算逻辑表达式的高度(如 a∧(b∨c))。 我有一个算法,但是有一个错误导致 2 个错误

  1. 此 function 申请是部分申请

  2. 这个表达式的类型是 int * int -> int * int 但是表达式应该是 int 我不知道我做错了什么? 下面是代码片段:

     let height fg = let rec aux acc = function | Bot -> acc+1 | Top -> acc+1 | Atome x -> acc+1 | Imp(f, g) -> max(aux(acc+1)f, aux(acc+1)g) | And(f, g) -> max(aux(acc+1)f, aux(acc+1)g) | Or(f, g) -> max(aux(acc+1)f, aux(acc+1)g) in acc 0;;

非常感谢。

如评论中所述,您将一个元组传递给max而不是两个 curried arguments。

let height f g = 
  let rec aux acc = function
    | Bot -> acc+1
    | Top -> acc+1
    | Atome x -> acc+1
    | Imp (f, g) -> max (aux (acc+1) f) (aux (acc+1) g)
    | And (f, g) -> max (aux (acc+1) f) (aux (acc+1) g)
    | Or (f, g) -> max (aux (acc+1) f) (aux (acc+1) g)
  in
  acc 0

虽然您可以编写将多个 arguments 作为单个元组的函数,但这在 OCaml 中不是惯用的。

let f x y = ...

比。

let f (x, y) = ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM