如何解决OCaml正在打印一项额外价值
所以我目前正在OCaml中编码,我应该使用提供给我的功能打印所有偶数。由于某些原因,当我输入[1; 2; 3; 4; 5]时,我的输出为[2; 4; 5]而不是[2; 4]。有谁知道为什么? 下面的代码是匹配语句,用于连接偶数。
let rec rem x n = match x with
|[]->[]
|[h]->[h]
|(h)::t-> if n(h) = false then h:: rem t n else rem t n;;
解决方法
您的匹配器| [h] -> [h]
将始终返回最后一个元素..即使它是奇数(您不对其进行检查)。应该是| [h] -> if n(h) = false then [h] else []
之类的东西(可能是反逻辑,因为我不确定n
到底在做什么)。
您必须删除
| [h] ->[h]
行。
在您的示例中,当您到达
| 4::[5] -> if n(4) = false then 4 :: rem [5] n else rem [5] n
然后您将输入
| [5] -> [5]
不检查!n(5)
。
没有它,您的模式匹配就已经完成(反之,ocaml也会抱怨),因为
| 5::[] -> ...
捕获“最后一个元素” /“单个元素列表”的情况。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。