微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

cons运算符的Ocaml列表问题

如何解决cons运算符的Ocaml列表问题

这是我的代码

let rec intersection l1 l2 res = 
match l1 with
    | [] -> res
    | h1 :: t1 ->
    (
        match l2 with
        | [] -> []
        | h2 :: t2 ->
        if member h1 l2 = true then 
            intersection t1 l2 h1::res 
        else 
            intersection t1 l2 res
    )

;; 问题在于 h1 :: res 部分,它引发以下错误

错误:此表达式的类型为“列表” 但是期望使用'a类型的表达式 类型变量'a出现在'列表中

但是,如果我将 h1 :: res 替换为 [h1] @res ,则该代码有效,但我没有得到此问题的确切原因,请提供帮助。

注意:-成员是一个自定义函数,如果元素属于列表l2则返回true,否则返回false。

解决方法

您的问题是intersection t1 l2 h1::res中的优先事项。 OCaml尝试评估intersection t1 l2 h1,然后将其限制为{'1}列表类型的res。您需要手动指定运算符优先级。你可以做

intersection t1 l2 (h1::res)

或者,您可以使用application operator from the Pervasives module。如文档中所述,g @@ f @@ xg (f (x))

intersection t1 l2 @@ h1::res

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。