如何在Caml中实现判断两个列表是否排列等价的函数
实现方案
核心实现思路非常直接:
- 优先校验两个列表的长度,长度不同时直接返回
false,无需后续计算 - 对两个列表执行相同规则的排序后,直接比较排序结果是否完全相等即可
代码实现
let are_permutations l1 l2 = if List.length l1 <> List.length l2 then false else List.sort compare l1 = List.sort compare l2
说明
- 该函数完全符合要求的
'a list -> 'a list -> bool类型,支持所有可比较类型的列表校验 - 逻辑成立的依据是:两个列表元素种类、各元素出现次数完全一致时,排序后的结果必然完全相同,和原始排列顺序无关
- 先校验长度的逻辑可以避免对长度不同的长列表做无意义的排序,优化运行效率
测试验证
你给出的示例运行结果如下:
are_permutations [2; 3; 4; 3] [3; 3; 4; 2]返回trueare_permutations [2; 3; 4; 3] [2; 4; 3]返回false
内容的提问来源于stack exchange,提问作者Chezza luna
相关产品推荐
相关产品推荐

