我'm writing OCaml code that reads in a list and removes any char '我出现在列表的开头 . 例如,列表 removeI['i';'i';'a';'c';'i']
应该返回 -: int * char list = ['a';'c';'i']
,因为列表的开头有2个'i' . 我相信我知道如何正确实施这一点;但是,我想返回一个元组,其中包含已移除'i'的数量以及删除了'i'的新列表 . 我知道这可能听起来令人困惑,但一个例子就是 removeI['i';'i';'a';'c';'i'] -: int * char list = (2,['a';'c';'i'])
删除了2个'i',删除了'i'的新列表 .
到目前为止,我有以下功能:
let rec removeI list = match list with
| [] -> []
| x::[] -> x::[]
| x::y::t1 -> if x='i' then removeI (y::t1)
else list;;
这将返回列表,第一个'我被删除了,但是当我尝试将删除的'i'作为元组的一部分时,我一直收到错误 . 有人能把我推向正确的方向吗?谢谢!
1 回答
您的递归调用将返回与整体函数相同的类型 . 因此,如果您将函数更改为重新启动
(count, list)
,则递归调用也将返回该函数 .通常,您希望收集返回的值并从中计算新值 .
现在你有这个:
但你需要更像这样的东西:
请注意,您的基本案例还必须返回计数和列表 .
作为一个评论,如果它看起来特别一致,我不想删除
'i'
.