function - 如何让tail函数返回我需要的东西?
问题描述
我需要在 OCaml 中编码列表。命令:编码 ['a','a','b','b','b','c'];; 必须返回 [(2,'a');(3,'b');(1,'c')]
现在我有这个功能:
let encode list =
let rec encodeHelper list acc = match list with
| [] -> []
| head :: [] -> (1, head) :: []
| head :: headNext :: tail -> if (head = headNext) then encodeHelper (headNext :: tail) (acc + 1)
else (acc, head) :: encodeHelper (headNext :: tail) acc
in encodeHelper list 1
;;
但它返回:
- : (int * (char * char * char * char * char * char)) 列表 = [(1, ('a', 'a', 'b', 'b', 'b', 'c')) ]
解决方案
顶部显示的测试数据格式不正确。
;
OCaml 中的列表具有由分号 ( )分隔的元素。您的测试数据使用逗号代替 ( ,
)。逗号用于元组,这就是您在结果中看到元组的原因。
如果您在测试数据中更改,
为;
,您应该会看到更接近您正在寻找的东西。至少还有一个问题需要解决(在我的测试中)。
推荐阅读
- python - numpy - 为什么 Z[(0,2)] 可以在某些情况下查看并在其他情况下复制?
- java - 如何高效压缩三色图片
- python - 使用curve_fit进行多元高斯拟合的问题
- python - 如何拆分具有多个定界符的字符串,但每个定界符仅一次?Python
- reactjs - React-Bootstrap 轮播滑块:如何检测显示中的当前幻灯片
- mongodb - 使用 mongoimport 时,可以指定 _id 应该是 UUID 吗?
- javascript - 如何使用字典在 JavaScript 返回值中实现回调
- c++ - 参考偏移量中看似无关的规范
- c# - 如何以管理员身份使用windows服务启动软件?
- html - 里面的引号
显示为“”或类似字符的元素