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