关于 Ocaml 中的模式匹配,我遇到了一些问题。
基本上,我需要编写一个名为 reversed 的函数,它接受一个列表并检查它是否按相反的顺序排列。
至今:
let rec reversed (x:int list):bool =
match x with
| [] -> true
| y::z::tl -> if y < z then false else reversed tl;
| y::[] -> true;;
有用!(实际上令我惊讶:P)但是我可以看到一个缺陷,即如果没有更多的 tl,它将不匹配。测试这个返回真:
reversed [5;4;3;1;2];;
这是完全可以理解的,因为没有更多的尾巴,它只是匹配 y::[]
我将如何解决这个问题?
PS:这是我在 Ocaml 的第一天。对不起,如果问题很简单:D
PPS:我故意只使用 Core。(无模块)
PPPS:我理解这种情况,如果我做的事情根本上是错误的,请指出来。